rebuildjs 0.23.0 → 0.24.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.
@@ -1,11 +1,12 @@
1
1
  import type { ctx__be_T, ctx__get_T, ctx__set_T, lock_memosig_T, memo_T } from 'ctx-core/rmemo'
2
- import type { Metafile } from 'esbuild'
3
2
  import type { has_app_T, has_middleware_T } from '../ctx/index.js'
3
+ import type { rebuildjs_metafile_T } from '../metafile_l0/index.js'
4
4
  export declare const browser__metafile_path$_:ctx__be_T<has_app_T, memo_T<string>, 'app'>
5
5
  export declare const browser__metafile_path_:ctx__get_T<has_app_T, string>
6
- export declare const browser__metafile$_:ctx__be_T<has_app_T, lock_memosig_T<Metafile|undefined>, 'app'>
7
- export declare const browser__metafile_:ctx__get_T<has_app_T, Metafile|undefined>
8
- export declare const browser__metafile__set:ctx__set_T<has_app_T, Metafile|undefined>
6
+ export declare const browser__metafile$_:ctx__be_T<has_app_T, lock_memosig_T<rebuildjs_metafile_T|undefined>, 'app'>
7
+ export declare const browser__metafile_:ctx__get_T<has_app_T, rebuildjs_metafile_T|undefined>
8
+ export declare const browser__metafile__set:ctx__set_T<has_app_T, rebuildjs_metafile_T|undefined>
9
+ export declare function browser__metafile__persist():Promise<void>
9
10
  export declare const browser__output__relative_path$_:ctx__be_T<has_middleware_T, memo_T<string>, 'middleware'>
10
11
  export declare const browser__output__relative_path_:ctx__get_T<has_middleware_T, string>
11
12
  export declare const browser__script$_:ctx__be_T<has_middleware_T, memo_T<string>, 'middleware'>
package/browser/index.js CHANGED
@@ -1,9 +1,10 @@
1
1
  import { file_exists_ } from 'ctx-core/fs'
2
2
  import { nullish__none_, waitfor } from 'ctx-core/function'
3
3
  import { be_lock_memosig_triple_, be_memo_pair_ } from 'ctx-core/rmemo'
4
- import { readFile } from 'node:fs/promises'
4
+ import { readFile, writeFile } from 'node:fs/promises'
5
5
  import { join, relative } from 'path'
6
6
  import { browser__relative_path_, browser_path_ } from '../app/index.js'
7
+ import { app_ctx } from '../ctx/index.js'
7
8
  import { server__output_ } from '../server/index.js'
8
9
  export const [
9
10
  browser__metafile_path$_,
@@ -16,22 +17,32 @@ export const [
16
17
  browser__metafile$_,
17
18
  browser__metafile_,
18
19
  browser__metafile__set
19
- ] = be_lock_memosig_triple_(()=>
20
- undefined,
21
- async (ctx, browser__metafile$)=>{
22
- browser__metafile__waitfor_promise?.cancel?.()
23
- let metafile_path
24
- if (!browser__metafile$.lock) {
25
- metafile_path = browser__metafile_path_(ctx)
26
- browser__metafile__waitfor_promise = waitfor(
27
- ()=>file_exists_(metafile_path),
28
- 200
29
- ).catch(()=>false)
30
- if (await browser__metafile__waitfor_promise && metafile_path === browser__metafile_path_(ctx)) {
31
- browser__metafile$._ = await readFile(metafile_path).then(buf=>JSON.parse(buf + ''))
20
+ ] = /** @type {be_lock_memosig_triple_T<rebuildjs_metafile_T>} */
21
+ be_lock_memosig_triple_(()=>
22
+ undefined,
23
+ async (ctx, browser__metafile$)=>{
24
+ browser__metafile__waitfor_promise?.cancel?.()
25
+ let metafile_path
26
+ if (!browser__metafile$.lock) {
27
+ metafile_path = browser__metafile_path_(ctx)
28
+ browser__metafile__waitfor_promise = waitfor(
29
+ ()=>file_exists_(metafile_path),
30
+ 200
31
+ ).catch(()=>false)
32
+ if (await browser__metafile__waitfor_promise && metafile_path === browser__metafile_path_(ctx)) {
33
+ browser__metafile$._ = await readFile(metafile_path).then(buf=>JSON.parse(buf + ''))
34
+ }
32
35
  }
33
- }
34
- }, { ns: 'app', id: 'browser__metafile' })
36
+ }, { ns: 'app', id: 'browser__metafile' })
37
+ export function browser__metafile__persist() {
38
+ return nullish__none_([
39
+ browser__metafile_path_(app_ctx),
40
+ browser__metafile_(app_ctx)
41
+ ], (browser__metafile_path, browser__metafile)=>
42
+ writeFile(
43
+ browser__metafile_path,
44
+ JSON.stringify(browser__metafile, null, '\t')))
45
+ }
35
46
  export const [
36
47
  browser__output__relative_path$_,
37
48
  browser__output__relative_path_
@@ -5,7 +5,12 @@ import { rmemo__wait } from 'ctx-core/rmemo'
5
5
  import esmock from 'esmock'
6
6
  import { test } from 'uvu'
7
7
  import { equal, throws } from 'uvu/assert'
8
- import { browser_metafile0, browser_metafile1, browser_metafile2, server_metafile0 } from '../_fixtures/index.js'
8
+ import {
9
+ browser__metafile0,
10
+ browser__metafile1,
11
+ browser__metafile2,
12
+ server__metafile0
13
+ } from '../_fixtures/metafiles.js'
9
14
  import { dist_path__set, is_prod__set } from '../app/index.js'
10
15
  import { app_ctx, middleware_ctx_ } from '../ctx/index.js'
11
16
  import { server__metafile__set, server__output_, server__output__relative_path__set } from '../server/index.js'
@@ -70,9 +75,9 @@ test('browser__metafile', async ()=>{
70
75
  readFile_path = path
71
76
  switch (path) {
72
77
  case '/cwd/dist0/browser/metafile.json':
73
- return Buffer.from(JSON.stringify(browser_metafile0), 'utf-8')
78
+ return Buffer.from(JSON.stringify(browser__metafile0), 'utf-8')
74
79
  case '/cwd/dist1/browser/metafile.json':
75
- return Buffer.from(JSON.stringify(browser_metafile1), 'utf-8')
80
+ return Buffer.from(JSON.stringify(browser__metafile1), 'utf-8')
76
81
  }
77
82
  }
78
83
  },
@@ -84,65 +89,65 @@ test('browser__metafile', async ()=>{
84
89
  _browser__metafile$_(app_ctx),
85
90
  m=>m,
86
91
  100)
87
- equal(_browser__metafile$_(app_ctx)._, browser_metafile0)
88
- equal(_browser__metafile_(app_ctx), browser_metafile0)
92
+ equal(_browser__metafile$_(app_ctx)._, browser__metafile0)
93
+ equal(_browser__metafile_(app_ctx), browser__metafile0)
89
94
  equal(file_exists__path, '/cwd/dist0/browser/metafile.json')
90
95
  equal(readFile_path, '/cwd/dist0/browser/metafile.json')
91
- equal(_browser__metafile$_(app_ctx)._, browser_metafile0)
92
- equal(_browser__metafile_(app_ctx), browser_metafile0)
96
+ equal(_browser__metafile$_(app_ctx)._, browser__metafile0)
97
+ equal(_browser__metafile_(app_ctx), browser__metafile0)
93
98
  dist_path__set(app_ctx, '/cwd/dist1')
94
99
  await rmemo__wait(
95
100
  _browser__metafile$_(app_ctx),
96
- m=>deep_equal(m, browser_metafile1),
101
+ m=>deep_equal(m, browser__metafile1),
97
102
  100)
98
- equal(_browser__metafile$_(app_ctx)._, browser_metafile1)
99
- equal(_browser__metafile_(app_ctx), browser_metafile1)
103
+ equal(_browser__metafile$_(app_ctx)._, browser__metafile1)
104
+ equal(_browser__metafile_(app_ctx), browser__metafile1)
100
105
  equal(file_exists__path, '/cwd/dist1/browser/metafile.json')
101
106
  equal(readFile_path, '/cwd/dist1/browser/metafile.json')
102
107
  dist_path__set(app_ctx, '/cwd/dist0')
103
108
  await rmemo__wait(
104
109
  _browser__metafile$_(app_ctx),
105
- m=>deep_equal(m, browser_metafile0),
110
+ m=>deep_equal(m, browser__metafile0),
106
111
  100)
107
- equal(_browser__metafile$_(app_ctx)._, browser_metafile0)
108
- equal(_browser__metafile_(app_ctx), browser_metafile0)
112
+ equal(_browser__metafile$_(app_ctx)._, browser__metafile0)
113
+ equal(_browser__metafile_(app_ctx), browser__metafile0)
109
114
  equal(file_exists__path, '/cwd/dist0/browser/metafile.json')
110
115
  equal(readFile_path, '/cwd/dist0/browser/metafile.json')
111
- _browser__metafile__set(app_ctx, browser_metafile2)
112
- equal(_browser__metafile$_(app_ctx)._, browser_metafile2)
113
- equal(_browser__metafile_(app_ctx), browser_metafile2)
116
+ _browser__metafile__set(app_ctx, browser__metafile2)
117
+ equal(_browser__metafile$_(app_ctx)._, browser__metafile2)
118
+ equal(_browser__metafile_(app_ctx), browser__metafile2)
114
119
  dist_path__set(app_ctx, '/cwd/dist1')
115
120
  let error_msg:string|undefined = undefined
116
121
  try {
117
122
  await rmemo__wait(
118
123
  _browser__metafile$_(app_ctx),
119
- m=>deep_equal(m, browser_metafile1),
124
+ m=>deep_equal(m, browser__metafile1),
120
125
  100)
121
126
  } catch (e) {
122
127
  error_msg = (e as Error).message
123
128
  }
124
- equal(_browser__metafile$_(app_ctx)._, browser_metafile2)
125
- equal(_browser__metafile_(app_ctx), browser_metafile2)
129
+ equal(_browser__metafile$_(app_ctx)._, browser__metafile2)
130
+ equal(_browser__metafile_(app_ctx), browser__metafile2)
126
131
  equal(error_msg, `Timeout 100ms`)
127
132
  // @ts-expect-error TS2345
128
133
  throws(()=>_browser__metafile$_(ctx_()))
129
134
  // @ts-expect-error TS2345
130
135
  throws(()=>_browser__metafile_(ctx_()))
131
136
  // @ts-expect-error TS2345
132
- throws(()=>_browser__metafile__set(ctx_(), browser_metafile0))
137
+ throws(()=>_browser__metafile__set(ctx_(), browser__metafile0))
133
138
  })
134
139
  test('browser__output__relative_path', ()=>{
135
140
  const middleware_ctx = middleware_ctx_()
136
141
  equal(browser__output__relative_path$_(middleware_ctx)._, undefined)
137
142
  equal(browser__output__relative_path_(middleware_ctx), undefined)
138
- server__metafile__set(middleware_ctx, server_metafile0)
143
+ server__metafile__set(middleware_ctx, server__metafile0)
139
144
  equal(browser__output__relative_path$_(middleware_ctx)._, undefined)
140
145
  equal(browser__output__relative_path_(middleware_ctx), undefined)
141
- browser__metafile__set(middleware_ctx, browser_metafile0)
146
+ browser__metafile__set(middleware_ctx, browser__metafile0)
142
147
  equal(browser__output__relative_path$_(middleware_ctx)._, undefined)
143
148
  equal(browser__output__relative_path_(middleware_ctx), undefined)
144
149
  server__output__relative_path__set(middleware_ctx, 'dist/server--dev/index.server-SVR0SVR0.js')
145
- equal(server_metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'], {
150
+ equal(server__metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'], {
146
151
  'imports': [],
147
152
  'exports': [],
148
153
  'entryPoint': 'src/app/index.server.ts',
@@ -154,7 +159,7 @@ test('browser__output__relative_path', ()=>{
154
159
  },
155
160
  'bytes': 98
156
161
  })
157
- equal(server__output_(middleware_ctx), server_metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'])
162
+ equal(server__output_(middleware_ctx), server__metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'])
158
163
  equal(browser__output__relative_path$_(middleware_ctx)._, 'dist/browser--dev/index.browser-BRS0BRS0.js')
159
164
  equal(browser__output__relative_path$_(middleware_ctx)._, 'dist/browser--dev/index.browser-BRS0BRS0.js')
160
165
  // @ts-expect-error TS2345
@@ -166,10 +171,10 @@ test('browser__script', ()=>{
166
171
  const middleware_ctx = middleware_ctx_()
167
172
  equal(browser__script$_(middleware_ctx)._, undefined)
168
173
  equal(browser__script_(middleware_ctx), undefined)
169
- server__metafile__set(middleware_ctx, server_metafile0)
174
+ server__metafile__set(middleware_ctx, server__metafile0)
170
175
  equal(browser__script$_(middleware_ctx)._, undefined)
171
176
  equal(browser__script_(middleware_ctx), undefined)
172
- browser__metafile__set(middleware_ctx, browser_metafile0)
177
+ browser__metafile__set(middleware_ctx, browser__metafile0)
173
178
  equal(browser__script$_(middleware_ctx)._, undefined)
174
179
  equal(browser__script_(middleware_ctx), undefined)
175
180
  server__output__relative_path__set(middleware_ctx, 'dist/server--dev/index.server-SVR0SVR0.js')
package/build/index.d.ts CHANGED
@@ -1,9 +1,16 @@
1
- import type { BuildOptions, Plugin } from 'esbuild'
2
- export declare function browser__build(config?:rebuildjs__build_config_T):Promise<void>
3
- export declare function server__build(config?:rebuildjs__build_config_T):Promise<void>
1
+ import type { ctx__be_T, ctx__get_T, ctx__set_T, sig_T } from 'ctx-core/rmemo'
2
+ import type { BuildContext, BuildOptions, Plugin } from 'esbuild'
3
+ import type { has_app_T } from '../ctx/index.js'
4
+ export declare const build_id$_:ctx__be_T<has_app_T, sig_T<string|undefined>, 'app'>
5
+ export declare const build_id_:ctx__get_T<has_app_T, string|undefined>
6
+ export declare const build_id__set:ctx__set_T<has_app_T, string|undefined>
7
+ export declare function build_id__refresh():string
8
+ export declare function browser__build(config?:rebuildjs_build_config_T):Promise<BuildContext>
9
+ export declare function server__build(config?:rebuildjs_build_config_T):Promise<BuildContext>
4
10
  export declare function server__external_(config?:Partial<BuildOptions>):Promise<string[]>
5
- export declare function rebuildjs__plugin_():Plugin
6
- export type rebuildjs__build_config_T = Partial<BuildOptions>&{ rebuildjs?: rebuildjs__plugin_config_T }
7
- export type rebuildjs__plugin_config_T = {
11
+ export declare function rebuildjs_plugin_():Plugin
12
+ export type rebuildjs_build_config_T =
13
+ Partial<BuildOptions>&{ rebuildjs?:rebuildjs_plugin_config_T }
14
+ export type rebuildjs_plugin_config_T = {
8
15
  watch?:boolean
9
16
  }
package/build/index.js CHANGED
@@ -1,16 +1,42 @@
1
+ /// <reference types="../metafile_l0/index.d.ts" />
1
2
  /// <reference types="./index.d.ts" />
2
- /** @typedef {import('esbuild').BuildOptions}BuildOptions */
3
- /** @typedef {import('esbuild').Plugin}Plugin */
4
- import { build, context } from 'esbuild'
3
+ import { file_exists__waitfor } from 'ctx-core/fs'
4
+ import { nullish__none_, run } from 'ctx-core/function'
5
+ import { be, be_sig_triple_, memo_ } from 'ctx-core/rmemo'
6
+ import { short_uuid_ } from 'ctx-core/uuid'
7
+ import { context } from 'esbuild'
5
8
  import { fdir } from 'fdir'
6
- import { link, mkdir, rm, writeFile } from 'node:fs/promises'
9
+ import { link, mkdir, rm } from 'node:fs/promises'
7
10
  import { join, relative, resolve } from 'path'
8
11
  import { app_path_, browser_path_, cwd_, is_prod_, server__relative_path_, server_path_ } from '../app/index.js'
9
- import { browser__metafile__set } from '../browser/index.js'
12
+ import {
13
+ browser__metafile_,
14
+ browser__metafile__persist,
15
+ browser__metafile__set,
16
+ browser__output__relative_path_
17
+ } from '../browser/index.js'
10
18
  import { app_ctx } from '../ctx/index.js'
11
- import { server__metafile_, server__metafile__set } from '../server/index.js'
19
+ import { metafile__build_id_ } from '../metafile/index.js'
20
+ import {
21
+ server__metafile_,
22
+ server__metafile__persist,
23
+ server__metafile__set,
24
+ server__output__relative_path_M_middleware_ctx_
25
+ } from '../server/index.js'
26
+ export const [
27
+ build_id$_,
28
+ build_id_,
29
+ build_id__set,
30
+ ] = be_sig_triple_(()=>
31
+ undefined,
32
+ { id: 'build_id', ns: 'app' })
33
+ export function build_id__refresh() {
34
+ const build_id = Date.now() + '-' + short_uuid_()
35
+ build_id__set(app_ctx, build_id)
36
+ return build_id
37
+ }
12
38
  /**
13
- * @param {Plugin}config
39
+ * @param {import('esbuild').Plugin}config
14
40
  * @returns {Promise<void>}
15
41
  * @private
16
42
  */
@@ -31,8 +57,8 @@ export async function browser__build(config) {
31
57
  for (const path of path_a) {
32
58
  entryPoints.push(path)
33
59
  }
34
- const plugins = [rebuildjs__plugin_(), ...(esbuild__config.plugins || [])]
35
- /** @type {BuildOptions} */
60
+ const plugins = [rebuildjs_plugin_(), ...(esbuild__config.plugins || [])]
61
+ /** @type {import('esbuild').BuildOptions} */
36
62
  const esbuild_config = {
37
63
  entryNames: '[name]-[hash]',
38
64
  assetNames: '[name]-[hash]',
@@ -51,16 +77,17 @@ export async function browser__build(config) {
51
77
  outdir: browser_path_(app_ctx),
52
78
  plugins,
53
79
  }
80
+ const esbuild_ctx = await context(esbuild_config)
54
81
  if (rebuildjs?.watch ?? !is_prod_(app_ctx)) {
55
- const esbuild_ctx = await context(esbuild_config)
56
82
  await esbuild_ctx.watch()
57
83
  console.log('browser__build|watch')
58
84
  } else {
59
- await build(esbuild_config)
85
+ await esbuild_ctx.rebuild()
60
86
  }
87
+ return esbuild_ctx
61
88
  }
62
89
  /**
63
- * @param {rebuildjs__build_config_T}[config]
90
+ * @param {rebuildjs_build_config_T}[config]
64
91
  * @returns {Promise<void>}
65
92
  */
66
93
  export async function server__build(config) {
@@ -79,7 +106,7 @@ export async function server__build(config) {
79
106
  for (const path of path_a) {
80
107
  entryPoints.push(path)
81
108
  }
82
- const plugins = [rebuildjs__plugin_(), ...(esbuild__config.plugins || [])]
109
+ const plugins = [rebuildjs_plugin_(), ...(esbuild__config.plugins || [])]
83
110
  const esbuild_config = {
84
111
  entryNames: '[name]-[hash]',
85
112
  assetNames: '[name]-[hash]',
@@ -98,54 +125,169 @@ export async function server__build(config) {
98
125
  external: server__external_(esbuild__config),
99
126
  plugins,
100
127
  }
128
+ const esbuild_ctx = await context(esbuild_config)
101
129
  if (rebuildjs?.watch ?? !is_prod_(app_ctx)) {
102
- const esbuild_ctx = await context(esbuild_config)
103
130
  await esbuild_ctx.watch()
104
131
  console.log('server__build|watch')
105
132
  } else {
106
- await build(esbuild_config)
133
+ await esbuild_ctx.rebuild()
107
134
  }
135
+ return esbuild_ctx
108
136
  }
109
137
  /**
110
- * @param {rebuildjs__build_config_T}[config]
138
+ * @param {rebuildjs_build_config_T}[config]
111
139
  * @returns {Promise<string[]>}
112
140
  */
113
141
  export function server__external_(config) {
114
142
  return ['bun', 'node_modules/*', ...(config.external || [])]
115
143
  }
116
144
  /**
117
- * @returns {Plugin}
145
+ * @returns {import('esbuild').Plugin}
118
146
  * @private
147
+ *
119
148
  */
120
- export function rebuildjs__plugin_() {
121
- return {
122
- name: 'rebuildjs__plugin',
123
- setup(build) {
149
+ export function rebuildjs_plugin_() {
150
+ return { name: 'rebuildjs_plugin', setup: setup_() }
151
+ function setup_() {
152
+ /**
153
+ * @param {import('esbuild').PluginBuild}build
154
+ */
155
+ const setup = build=>{
124
156
  build.onEnd(async result=>{
125
- if (result.metafile) {
157
+ const {
158
+ /** @type {rebuildjs_metafile_T} */
159
+ metafile
160
+ } = result
161
+ if (metafile) {
126
162
  const { outdir } = build.initialOptions
127
163
  const resolve_outdir = resolve(outdir)
128
164
  if (resolve_outdir === server_path_(app_ctx)) {
129
- server__metafile__set(app_ctx, result.metafile)
165
+ const build_id = build_id__refresh()
166
+ await server__metafile__update(metafile, build_id)
167
+ if (build_id_(app_ctx) === build_id) {
168
+ await browser__metafile__update(browser__metafile_(app_ctx), build_id)
169
+ }
130
170
  } else if (resolve_outdir === browser_path_(app_ctx)) {
131
- browser__metafile__set(app_ctx, result.metafile)
132
- }
133
- if (outdir) {
134
- await writeFile(
135
- join(outdir, 'metafile.json'),
136
- JSON.stringify(result.metafile, null, 2))
171
+ const build_id = build_id__refresh()
172
+ await browser__metafile__update(metafile, build_id)
173
+ if (build_id_(app_ctx) === build_id) {
174
+ await server__metafile__update(server__metafile_(app_ctx), build_id)
175
+ }
137
176
  }
138
177
  }
139
- const outputs = server__metafile_(app_ctx)?.outputs ?? {}
140
- for (let output__relative_path in outputs) {
141
- if (/(\.js|\.mjs)(\.map)?$/.test(output__relative_path)) continue
142
- const asset_path = join(cwd_(app_ctx), output__relative_path)
143
- const link_path =
144
- join(browser_path_(app_ctx), relative(server__relative_path_(app_ctx), output__relative_path))
145
- await rm(link_path, { force: true })
146
- await link(asset_path, link_path)
147
- }
148
178
  })
149
179
  }
180
+ // Prevent GC
181
+ setup.rebuildjs__assets__link$ = rebuildjs__assets__link$_()
182
+ return setup
183
+ /**
184
+ *
185
+ * @returns {memo_T<void>}
186
+ * @private
187
+ */
188
+ function rebuildjs__assets__link$_() {
189
+ return (
190
+ be(app_ctx, ctx=>
191
+ run(memo_(assets__link$=>{
192
+ r()
193
+ return assets__link$
194
+ function r() {
195
+ nullish__none_([
196
+ build_id_(ctx),
197
+ metafile__build_id_(ctx),
198
+ server__metafile_(ctx),
199
+ cwd_(ctx),
200
+ browser_path_(ctx),
201
+ server__relative_path_(ctx),
202
+ ], (
203
+ build_id,
204
+ metafile__build_id,
205
+ server__metafile,
206
+ cwd,
207
+ browser_path,
208
+ server__relative_path,
209
+ )=>{
210
+ if (build_id === metafile__build_id) {
211
+ run(async ()=>{
212
+ const outputs = server__metafile.outputs ?? {}
213
+ for (let output__relative_path in outputs) {
214
+ if (/(\.js|\.mjs)(\.map)?$/.test(output__relative_path)) continue
215
+ const server_asset_path = join(cwd, output__relative_path)
216
+ const browser_asset_path = join(
217
+ browser_path,
218
+ relative(server__relative_path, output__relative_path))
219
+ if (cancel_()) return
220
+ await rm(browser_asset_path, { force: true })
221
+ if (cancel_()) return
222
+ await file_exists__waitfor(server_asset_path)
223
+ if (cancel_()) return
224
+ await link(server_asset_path, browser_asset_path)
225
+ }
226
+ })
227
+ }
228
+ function cancel_() {
229
+ return (
230
+ build_id_(ctx) !== build_id
231
+ || metafile__build_id_(ctx) !== metafile__build_id
232
+ || server__metafile_(ctx) !== server__metafile
233
+ || cwd_(ctx) !== cwd
234
+ || browser_path_(ctx) !== browser_path
235
+ || server__relative_path_(ctx) !== server__relative_path
236
+ )
237
+ }
238
+ })
239
+ }
240
+ })),
241
+ { id: 'rebuildjs__assets__link$', ns: 'app' })
242
+ )
243
+ }
244
+ }
245
+ }
246
+ async function server__metafile__update(server__metafile, build_id) {
247
+ if (!server__metafile) return
248
+ server__metafile = {
249
+ ...server__metafile,
250
+ build_id,
251
+ rebuildjs_target: 'server'
252
+ }
253
+ server__metafile__set(app_ctx, server__metafile)
254
+ for (const [
255
+ server__output__relative_path,
256
+ middleware_ctx
257
+ ] of server__output__relative_path_M_middleware_ctx_(app_ctx).entries()) {
258
+ const output = server__metafile.outputs[server__output__relative_path]
259
+ const { cssBundle } = output
260
+ if (cssBundle) {
261
+ output.esbuild_cssBundle = cssBundle
262
+ output.cssBundle_content = [
263
+ server__output__relative_path,
264
+ ...(
265
+ browser__output__relative_path_(middleware_ctx)
266
+ ? [browser__output__relative_path_(middleware_ctx)]
267
+ : [])
268
+ ]
269
+ }
270
+ }
271
+ await server__metafile__persist()
272
+ }
273
+ async function browser__metafile__update(browser__metafile, build_id) {
274
+ if (!browser__metafile) return
275
+ browser__metafile = {
276
+ ...browser__metafile,
277
+ build_id,
278
+ rebuildjs_target: 'browser'
279
+ }
280
+ browser__metafile__set(app_ctx, browser__metafile)
281
+ for (const middleware_ctx of server__output__relative_path_M_middleware_ctx_(app_ctx)?.values?.() ?? []) {
282
+ const browser__output__relative_path = browser__output__relative_path_(middleware_ctx)
283
+ if (browser__output__relative_path) {
284
+ const output = browser__metafile.outputs[browser__output__relative_path]
285
+ const { cssBundle } = output
286
+ if (cssBundle) {
287
+ output.esbuild_cssBundle = cssBundle
288
+ output.cssBundle_content = [browser__output__relative_path]
289
+ }
290
+ }
150
291
  }
292
+ await browser__metafile__persist()
151
293
  }
@@ -1,11 +1,93 @@
1
+ import { ctx_ } from 'ctx-core/be'
2
+ import { file_exists_ } from 'ctx-core/fs'
3
+ import { sleep } from 'ctx-core/function'
4
+ import { BuildContext } from 'esbuild'
5
+ import { rm } from 'node:fs/promises'
6
+ import { dirname, join } from 'path'
1
7
  import { test } from 'uvu'
2
- import { equal } from 'uvu/assert'
3
- import './index.js'
8
+ import { equal, throws } from 'uvu/assert'
9
+ import { cwd__set } from '../app/index.js'
10
+ import { browser__metafile_ } from '../browser/index.js'
4
11
  import { app_ctx } from '../ctx/index.js'
12
+ import { metafile__wait } from '../metafile/index.js'
13
+ import { server__metafile_ } from '../server/index.js'
14
+ import { browser__build, build_id$_, build_id_, build_id__refresh, build_id__set, server__build } from './index.js'
5
15
  test.after.each(()=>{
6
16
  app_ctx.s.app.clear()
7
17
  })
8
- test('build|loads', ()=>{
9
- equal(1, 1)
18
+ test('build_id', ()=>{
19
+ equal(build_id$_(app_ctx)(), undefined)
20
+ equal(build_id_(app_ctx), undefined)
21
+ build_id__set(app_ctx, 'test_build_id')
22
+ equal(build_id$_(app_ctx)(), 'test_build_id')
23
+ equal(build_id_(app_ctx), 'test_build_id')
24
+ // @ts-expect-error TS2345
25
+ throws(()=>build_id$_(ctx_()))
26
+ // @ts-expect-error TS2345
27
+ throws(()=>build_id_(ctx_()))
28
+ })
29
+ test('build_id__refresh', ()=>{
30
+ equal(build_id_(app_ctx), undefined)
31
+ const build_id = build_id__refresh()
32
+ equal(build_id_(app_ctx), build_id)
33
+ equal(
34
+ parseInt(build_id.split('-')[0]) <= Date.now(),
35
+ true)
36
+ equal(
37
+ parseInt(build_id.split('-')[0]) > Date.now() - 1000,
38
+ true)
39
+ })
40
+ test('browser__build|server__build|rebuildjs_plugin_|metafile', async ()=>{
41
+ const test_dir = dirname(new URL(import.meta.url).pathname)
42
+ const cwd = join(test_dir, '../_fixtures')
43
+ cwd__set(app_ctx, cwd)
44
+ await rm(join(cwd, 'dist'), { recursive: true, force: true })
45
+ let server__build_context:BuildContext|undefined = undefined
46
+ let browser__build_context:BuildContext|undefined = undefined
47
+ try {
48
+ server__build_context = await server__build()
49
+ browser__build_context = await browser__build()
50
+ await metafile__wait()
51
+ equal(await file_exists_(join(cwd, 'dist')), true)
52
+ equal(await file_exists_(join(cwd, 'dist', 'browser--dev')), true)
53
+ equal(await file_exists_(join(cwd, 'dist', 'server--dev')), true)
54
+ const server__metafile = server__metafile_(app_ctx)!
55
+ equal(server__metafile.rebuildjs_target, 'server')
56
+ const browser__metafile = browser__metafile_(app_ctx)!
57
+ equal(browser__metafile.rebuildjs_target, 'browser')
58
+ equal(server__metafile.build_id != null, true)
59
+ equal(server__metafile.build_id, browser__metafile.build_id)
60
+ const server__output__relative_path =
61
+ Object.keys(server__metafile.outputs)
62
+ .find(server__output__relative_path=>
63
+ server__metafile.outputs[server__output__relative_path].entryPoint)!
64
+ equal(typeof server__output__relative_path, 'string')
65
+ const server__entryPoint__output =
66
+ server__metafile.outputs[server__output__relative_path]
67
+ equal(server__entryPoint__output != null, true)
68
+ equal(server__entryPoint__output.cssBundle != null, true)
69
+ equal(server__entryPoint__output.esbuild_cssBundle, server__entryPoint__output.cssBundle)
70
+ const browser__output__relative_path =
71
+ Object.keys(browser__metafile.outputs)
72
+ .find(browser__output__relative_path=>
73
+ browser__metafile.outputs[browser__output__relative_path].entryPoint)!
74
+ equal(typeof browser__output__relative_path, 'string')
75
+ const browser__entryPoint__output =
76
+ browser__metafile.outputs[browser__output__relative_path]
77
+ equal(browser__entryPoint__output != null, true)
78
+ equal(browser__entryPoint__output.cssBundle != null, true)
79
+ equal(browser__entryPoint__output.esbuild_cssBundle, browser__entryPoint__output.cssBundle)
80
+ equal(server__entryPoint__output.cssBundle_content, [
81
+ server__output__relative_path,
82
+ browser__output__relative_path
83
+ ])
84
+ equal(browser__entryPoint__output.cssBundle_content, [
85
+ browser__output__relative_path
86
+ ])
87
+ } finally {
88
+ await sleep(100)
89
+ server__build_context?.dispose?.()
90
+ browser__build_context?.dispose?.()
91
+ }
10
92
  })
11
93
  test.run()
package/ctx/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /// <reference types="./index.d.ts" />
2
2
  import { ns_ctx_ } from 'ctx-core/be'
3
- export const app_ctx = app_ctx_()
3
+ export const app_ctx = globalThis.rebuildjs__app_ctx ??= app_ctx_()
4
4
  /**
5
5
  * @returns {app_ctx_T}
6
6
  * @private
@@ -1 +1,6 @@
1
+ import type { ctx__be_T, ctx__get_T, memo_T } from 'ctx-core/rmemo'
2
+ import type { has_app_T } from '../ctx/index.js'
3
+ export * from '../metafile_l0/index.js'
4
+ export declare const metafile__build_id$_:ctx__be_T<has_app_T, memo_T<string>, 'app'>
5
+ export declare const metafile__build_id_:ctx__get_T<has_app_T, string>
1
6
  export declare function metafile__wait(timeout?:number):Promise<void>
package/metafile/index.js CHANGED
@@ -1,13 +1,27 @@
1
- import { memo_, rmemo__wait } from 'ctx-core/rmemo'
1
+ import { nullish__none_ } from 'ctx-core/function'
2
+ import { be_memo_pair_, rmemo__wait } from 'ctx-core/rmemo'
2
3
  import { browser__metafile_ } from '../browser/index.js'
3
4
  import { app_ctx } from '../ctx/index.js'
4
5
  import { server__metafile_ } from '../server/index.js'
6
+ export const [
7
+ metafile__build_id$_,
8
+ metafile__build_id_,
9
+ ] = be_memo_pair_((ctx, build_id$)=>
10
+ nullish__none_([server__metafile_(ctx), browser__metafile_(ctx)],
11
+ (server__metafile, browser__metafile)=>
12
+ server__metafile.build_id === browser__metafile.build_id
13
+ ? server__metafile.build_id
14
+ : build_id$.val),
15
+ { id: 'metafile__build_id', ns: 'app' })
5
16
  export async function metafile__wait(timeout = 5000) {
6
- await rmemo__wait(memo_(()=>
7
- server__metafile_(app_ctx) && browser__metafile_(app_ctx)),
8
- val=>val !== undefined,
9
- timeout
17
+ await rmemo__wait(
18
+ metafile__build_id$_(app_ctx),
19
+ metafile__build_id=>
20
+ metafile__build_id != null,
21
+ timeout
10
22
  ).catch(err=>{
11
- throw Error('metafile__wait|browser & server metafile timeout', { cause: err })
23
+ throw Error(
24
+ 'metafile__wait|browser__metafile & server__metafile timeout',
25
+ { cause: err })
12
26
  })
13
27
  }
@@ -2,7 +2,7 @@
2
2
  import { sleep } from 'ctx-core/function'
3
3
  import { test } from 'uvu'
4
4
  import { equal } from 'uvu/assert'
5
- import { browser_metafile0, server_metafile0 } from '../_fixtures/index.js'
5
+ import { browser__metafile0, server__metafile0 } from '../_fixtures/metafiles.js'
6
6
  import { browser__metafile__set } from '../browser/index.js'
7
7
  import { app_ctx } from '../ctx/index.js'
8
8
  import { server__metafile__set } from '../server/index.js'
@@ -16,9 +16,9 @@ test('metafile__wait|success', async ()=>{
16
16
  let promise0_resolved = false
17
17
  metafile__wait(200).then(()=>promise0_resolved = true)
18
18
  equal(promise0_resolved, false)
19
- server__metafile__set(app_ctx, server_metafile0)
19
+ server__metafile__set(app_ctx, server__metafile0)
20
20
  equal(promise0_resolved, false)
21
- browser__metafile__set(app_ctx, browser_metafile0)
21
+ browser__metafile__set(app_ctx, browser__metafile0)
22
22
  await sleep(0)
23
23
  equal(promise0_resolved, true)
24
24
  })
@@ -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, 'metafile__wait|browser & server metafile timeout')
34
+ equal(err?.message, 'metafile__wait|browser__metafile & server__metafile timeout')
35
35
  equal((err?.cause as Error)?.message, 'Timeout 0ms')
36
36
  })
37
37
  test.run()
@@ -0,0 +1,12 @@
1
+ import type { Metafile } from 'esbuild'
2
+ export type rebuildjs_metafile_T = Metafile&{
3
+ inputs:Metafile['inputs']
4
+ outputs:{
5
+ [path:string]:Metafile['outputs'][string]&{
6
+ esbuild_cssBundle?:string
7
+ cssBundle_content?:string[]
8
+ }
9
+ }
10
+ rebuildjs_target?:'browser'|'server'
11
+ build_id?:string
12
+ }
@@ -0,0 +1 @@
1
+ export {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rebuildjs",
3
- "version": "0.23.0",
3
+ "version": "0.24.2",
4
4
  "description": "Reactive esbuild...simple hackable alternative to vite for Multi Page Apps",
5
5
  "keywords": [
6
6
  "reactive",
@@ -32,6 +32,7 @@
32
32
  "build",
33
33
  "ctx",
34
34
  "metafile",
35
+ "metafile_l0",
35
36
  "middleware",
36
37
  "server",
37
38
  "types"
@@ -51,9 +52,9 @@
51
52
  "./package.json": "./package.json"
52
53
  },
53
54
  "dependencies": {
54
- "ctx-core": "^5.5.0",
55
- "elysia": "^0.8.5",
56
- "esbuild": "^0.19.10",
55
+ "ctx-core": "^5.6.1",
56
+ "elysia": "^0.8.6",
57
+ "esbuild": "^0.19.11",
57
58
  "fdir": "^6.1.1",
58
59
  "picomatch": "^3.0.1"
59
60
  },
@@ -74,8 +75,9 @@
74
75
  "build": ":",
75
76
  "clean": ":",
76
77
  "exec": "$@",
77
- "test": "pnpm test-unit && check-dts",
78
- "test-unit": "NODE_OPTIONS=--loader=esmock tsx node_modules/uvu/bin.js . '\\.test\\.(ts|js)$'",
79
- "test-unit-coverage": "c8 pnpm test-unit"
78
+ "test": "pnpm test:unit && pnpm test:types",
79
+ "test:types": "check-dts",
80
+ "test:unit": "NODE_OPTIONS=--loader=esmock tsx node_modules/uvu/bin.js . '\\.test\\.(ts|js)$'",
81
+ "test:unit:coverage": "c8 pnpm test:unit"
80
82
  }
81
83
  }
package/server/index.d.ts CHANGED
@@ -1,16 +1,19 @@
1
1
  import type { ctx__be_T, ctx__get_T, ctx__set_T, lock_memosig_T, memo_T, sig_T } from 'ctx-core/rmemo'
2
- import type { Metafile } from 'esbuild'
3
- import type { has_app_T, has_middleware_T } from '../ctx/index.js'
2
+ import type { has_app_T, has_middleware_T, middleware_ctx_T } from '../ctx/index.js'
3
+ import type { rebuildjs_metafile_T } from '../metafile_l0/index.js'
4
4
  export const server__metafile_path$_:ctx__be_T<has_app_T, memo_T<string>, 'app'>
5
5
  export const server__metafile_path_:ctx__get_T<has_app_T, string>
6
- export const server__metafile$_:ctx__be_T<has_app_T, lock_memosig_T<Metafile|undefined>, 'app'>
7
- export const server__metafile_:ctx__get_T<has_app_T, Metafile|undefined>
8
- export const server__metafile__set:ctx__set_T<has_app_T, Metafile|undefined>
6
+ export const server__metafile$_:ctx__be_T<has_app_T, lock_memosig_T<rebuildjs_metafile_T|undefined>, 'app'>
7
+ export const server__metafile_:ctx__get_T<has_app_T, rebuildjs_metafile_T|undefined>
8
+ export const server__metafile__set:ctx__set_T<has_app_T, rebuildjs_metafile_T|undefined>
9
+ export declare function server__metafile__persist():Promise<void>
10
+ export const server__output__relative_path_M_middleware_ctx$_:ctx__be_T<has_app_T, memo_T<Map<string, middleware_ctx_T>>, 'app'>
11
+ export const server__output__relative_path_M_middleware_ctx_:ctx__get_T<has_app_T, Map<string, middleware_ctx_T>>
9
12
  export const server__output__relative_path$_:ctx__be_T<has_middleware_T, sig_T<string>, 'middleware'>
10
13
  export const server__output__relative_path_:ctx__get_T<has_middleware_T, string>
11
14
  export const server__output__relative_path__set:ctx__set_T<has_middleware_T, string>
12
- export const server__output$_:ctx__be_T<has_middleware_T, memo_T<Metafile['outputs'][string]|undefined>, 'middleware'>
13
- export const server__output_:ctx__get_T<has_middleware_T, Metafile['outputs'][string]|undefined>
15
+ export const server__output$_:ctx__be_T<has_middleware_T, memo_T<rebuildjs_metafile_T['outputs'][string]|undefined>, 'middleware'>
16
+ export const server__output_:ctx__get_T<has_middleware_T, rebuildjs_metafile_T['outputs'][string]|undefined>
14
17
  export const server__cssBundle__relative_path$_:ctx__be_T<has_middleware_T, memo_T<string|undefined>, 'middleware'>
15
18
  export const server__cssBundle__relative_path_:ctx__get_T<has_middleware_T, string|undefined>
16
19
  export const server__cssBundle$_:ctx__be_T<has_middleware_T, memo_T<string|undefined>, 'middleware'>
package/server/index.js CHANGED
@@ -1,9 +1,10 @@
1
1
  import { file_exists_ } from 'ctx-core/fs'
2
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
- import { readFile } from 'node:fs/promises'
4
+ import { readFile, writeFile } from 'node:fs/promises'
5
5
  import { join, relative } from 'path'
6
6
  import { cwd_, server__relative_path_, server_path_ } from '../app/index.js'
7
+ import { app_ctx, middleware_ctx_ } from '../ctx/index.js'
7
8
  export const [
8
9
  server__metafile_path$_,
9
10
  server__metafile_path_,
@@ -15,22 +16,52 @@ export const [
15
16
  server__metafile$_,
16
17
  server__metafile_,
17
18
  server__metafile__set
18
- ] = be_lock_memosig_triple_(()=>
19
- undefined,
20
- async (ctx, server__metafile$)=>{
21
- server__metafile__waitfor_promise?.cancel?.()
22
- let metafile_path
23
- if (!server__metafile$.lock) {
24
- metafile_path = server__metafile_path_(ctx)
25
- server__metafile__waitfor_promise = waitfor(
26
- ()=>file_exists_(metafile_path),
27
- 200
28
- ).catch(()=>false)
29
- if (await server__metafile__waitfor_promise && metafile_path === server__metafile_path_(ctx)) {
30
- server__metafile$._ = await readFile(metafile_path).then(buf=>JSON.parse(buf+''))
19
+ ] = /** @type {be_lock_memosig_triple_T<rebuildjs_metafile_T>} */
20
+ be_lock_memosig_triple_(()=>
21
+ undefined,
22
+ async (ctx, server__metafile$)=>{
23
+ server__metafile__waitfor_promise?.cancel?.()
24
+ let metafile_path
25
+ if (!server__metafile$.lock) {
26
+ metafile_path = server__metafile_path_(ctx)
27
+ server__metafile__waitfor_promise = waitfor(
28
+ ()=>file_exists_(metafile_path),
29
+ 200
30
+ ).catch(()=>false)
31
+ if (await server__metafile__waitfor_promise && metafile_path === server__metafile_path_(ctx)) {
32
+ server__metafile$._ = await readFile(metafile_path).then(buf=>JSON.parse(buf + ''))
33
+ }
31
34
  }
32
- }
33
- }, { ns: 'app', id: 'server__metafile' })
35
+ }, { ns: 'app', id: 'server__metafile' })
36
+ export function server__metafile__persist() {
37
+ return nullish__none_([
38
+ server__metafile_path_(app_ctx),
39
+ server__metafile_(app_ctx)
40
+ ], (server__metafile_path, server__metafile)=>
41
+ writeFile(
42
+ server__metafile_path,
43
+ JSON.stringify(server__metafile, null, '\t')))
44
+ }
45
+ export const [
46
+ server__output__relative_path_M_middleware_ctx$_,
47
+ server__output__relative_path_M_middleware_ctx_,
48
+ ] = be_memo_pair_(ctx=>
49
+ nullish__none_([server__metafile_(ctx)],
50
+ server__metafile=>
51
+ new Map(
52
+ Object.keys(server__metafile.outputs)
53
+ .filter(server__output__relative_path=>
54
+ server__metafile.outputs[server__output__relative_path].entryPoint)
55
+ .map(
56
+ server__output__relative_path=>{
57
+ const middleware_ctx = middleware_ctx_()
58
+ server__output__relative_path__set(middleware_ctx, server__output__relative_path)
59
+ return [server__output__relative_path, middleware_ctx]
60
+ }))),
61
+ {
62
+ id: 'server__output__relative_path_M_middleware_ctx',
63
+ ns: 'app'
64
+ })
34
65
  export const [
35
66
  server__output__relative_path$_,
36
67
  server__output__relative_path_,
@@ -5,7 +5,7 @@ import { rmemo__wait } from 'ctx-core/rmemo'
5
5
  import esmock from 'esmock'
6
6
  import { test } from 'uvu'
7
7
  import { equal, throws } from 'uvu/assert'
8
- import { server_metafile0, server_metafile1, server_metafile2 } from '../_fixtures/index.js'
8
+ import { server__metafile0, server__metafile1, server__metafile2 } from '../_fixtures/metafiles.js'
9
9
  import { cwd__set, dist_path_, dist_path__set, is_prod__set, server_path_ } from '../app/index.js'
10
10
  import { app_ctx, middleware_ctx_ } from '../ctx/index.js'
11
11
  import {
@@ -24,7 +24,9 @@ import {
24
24
  server__output_,
25
25
  server__output__relative_path$_,
26
26
  server__output__relative_path_,
27
- server__output__relative_path__set
27
+ server__output__relative_path__set,
28
+ server__output__relative_path_M_middleware_ctx$_,
29
+ server__output__relative_path_M_middleware_ctx_
28
30
  } from './index.js'
29
31
  test.after.each(()=>{
30
32
  app_ctx.s.app.clear()
@@ -74,9 +76,9 @@ test('server__metafile', async ()=>{
74
76
  readFile_path = path
75
77
  switch (path) {
76
78
  case '/cwd/dist0/server/metafile.json':
77
- return Buffer.from(JSON.stringify(server_metafile0), 'utf-8')
79
+ return Buffer.from(JSON.stringify(server__metafile0), 'utf-8')
78
80
  case '/cwd/dist1/server/metafile.json':
79
- return Buffer.from(JSON.stringify(server_metafile1), 'utf-8')
81
+ return Buffer.from(JSON.stringify(server__metafile1), 'utf-8')
80
82
  }
81
83
  }
82
84
  }
@@ -85,43 +87,85 @@ test('server__metafile', async ()=>{
85
87
  equal(_server__metafile$_(app_ctx)._, undefined)
86
88
  equal(_server__metafile_(app_ctx), undefined)
87
89
  await rmemo__wait(_server__metafile$_(app_ctx), m=>m, 100)
88
- equal(_server__metafile$_(app_ctx)._, server_metafile0)
89
- equal(_server__metafile_(app_ctx), server_metafile0)
90
+ equal(_server__metafile$_(app_ctx)._, server__metafile0)
91
+ equal(_server__metafile_(app_ctx), server__metafile0)
90
92
  equal(file_exists__path, '/cwd/dist0/server/metafile.json')
91
93
  equal(readFile_path, '/cwd/dist0/server/metafile.json')
92
- equal(_server__metafile$_(app_ctx)._, server_metafile0)
93
- equal(_server__metafile_(app_ctx), server_metafile0)
94
+ equal(_server__metafile$_(app_ctx)._, server__metafile0)
95
+ equal(_server__metafile_(app_ctx), server__metafile0)
94
96
  dist_path__set(app_ctx, '/cwd/dist1')
95
- await rmemo__wait(_server__metafile$_(app_ctx), m=>deep_equal(m, server_metafile1), 100)
96
- equal(_server__metafile$_(app_ctx)._, server_metafile1)
97
- equal(_server__metafile_(app_ctx), server_metafile1)
97
+ await rmemo__wait(_server__metafile$_(app_ctx), m=>deep_equal(m, server__metafile1), 100)
98
+ equal(_server__metafile$_(app_ctx)._, server__metafile1)
99
+ equal(_server__metafile_(app_ctx), server__metafile1)
98
100
  equal(file_exists__path, '/cwd/dist1/server/metafile.json')
99
101
  equal(readFile_path, '/cwd/dist1/server/metafile.json')
100
102
  dist_path__set(app_ctx, '/cwd/dist0')
101
- await rmemo__wait(_server__metafile$_(app_ctx), m=>deep_equal(m, server_metafile0), 100)
102
- equal(_server__metafile$_(app_ctx)._, server_metafile0)
103
- equal(_server__metafile_(app_ctx), server_metafile0)
103
+ await rmemo__wait(_server__metafile$_(app_ctx), m=>deep_equal(m, server__metafile0), 100)
104
+ equal(_server__metafile$_(app_ctx)._, server__metafile0)
105
+ equal(_server__metafile_(app_ctx), server__metafile0)
104
106
  equal(file_exists__path, '/cwd/dist0/server/metafile.json')
105
107
  equal(readFile_path, '/cwd/dist0/server/metafile.json')
106
- _server__metafile__set(app_ctx, server_metafile2)
107
- equal(_server__metafile$_(app_ctx)._, server_metafile2)
108
- equal(_server__metafile_(app_ctx), server_metafile2)
108
+ _server__metafile__set(app_ctx, server__metafile2)
109
+ equal(_server__metafile$_(app_ctx)._, server__metafile2)
110
+ equal(_server__metafile_(app_ctx), server__metafile2)
109
111
  dist_path__set(app_ctx, '/cwd/dist1')
110
112
  let error_msg:string|undefined = undefined
111
113
  try {
112
- await rmemo__wait(_server__metafile$_(app_ctx), m=>deep_equal(m, server_metafile1), 100)
114
+ await rmemo__wait(_server__metafile$_(app_ctx), m=>deep_equal(m, server__metafile1), 100)
113
115
  } catch (e) {
114
116
  error_msg = (e as Error).message
115
117
  }
116
- equal(_server__metafile$_(app_ctx)._, server_metafile2)
117
- equal(_server__metafile_(app_ctx), server_metafile2)
118
+ equal(_server__metafile$_(app_ctx)._, server__metafile2)
119
+ equal(_server__metafile_(app_ctx), server__metafile2)
118
120
  equal(error_msg, `Timeout 100ms`)
119
121
  // @ts-expect-error TS2345
120
122
  throws(()=>_server__metafile$_(ctx_()))
121
123
  // @ts-expect-error TS2345
122
124
  throws(()=>_server__metafile_(ctx_()))
123
125
  // @ts-expect-error TS2345
124
- throws(()=>_server__metafile__set(ctx_(), server_metafile0))
126
+ throws(()=>_server__metafile__set(ctx_(), server__metafile0))
127
+ })
128
+ test('server__output__relative_path_M_middleware_ctx', ()=>{
129
+ equal(server__output__relative_path_M_middleware_ctx$_(app_ctx)._, undefined)
130
+ equal(server__output__relative_path_M_middleware_ctx_(app_ctx), undefined)
131
+ server__metafile__set(app_ctx, server__metafile0)
132
+ equal(
133
+ server__output__relative_path_M_middleware_ctx$_(app_ctx)
134
+ ._
135
+ .get('dist/server--dev/index.server-SVR0SVR0.js')
136
+ ?.is_ctx,
137
+ true)
138
+ equal(
139
+ server__output__relative_path_(
140
+ server__output__relative_path_M_middleware_ctx$_(app_ctx)
141
+ ._
142
+ .get('dist/server--dev/index.server-SVR0SVR0.js')!),
143
+ 'dist/server--dev/index.server-SVR0SVR0.js')
144
+ equal(
145
+ server__output__relative_path_M_middleware_ctx$_(app_ctx)
146
+ ._
147
+ .get('dist/server--dev/index.server-SVR0SVR0.js.map')
148
+ ?.is_ctx,
149
+ undefined)
150
+ equal(
151
+ server__output__relative_path_M_middleware_ctx_(app_ctx)
152
+ .get('dist/server--dev/index.server-SVR0SVR0.js')
153
+ ?.is_ctx,
154
+ true)
155
+ equal(
156
+ server__output__relative_path_(
157
+ server__output__relative_path_M_middleware_ctx_(app_ctx)
158
+ .get('dist/server--dev/index.server-SVR0SVR0.js')!),
159
+ 'dist/server--dev/index.server-SVR0SVR0.js')
160
+ equal(
161
+ server__output__relative_path_M_middleware_ctx_(app_ctx)
162
+ .get('dist/server--dev/index.server-SVR0SVR0.js.map')
163
+ ?.is_ctx,
164
+ undefined)
165
+ // @ts-expect-error TS2345
166
+ throws(()=>server__output__relative_path_M_middleware_ctx$_(ctx_()))
167
+ // @ts-expect-error TS2345
168
+ throws(()=>server__output__relative_path_M_middleware_ctx_(ctx_()))
125
169
  })
126
170
  test('server__output__relative_path', ()=>{
127
171
  const middleware_ctx = middleware_ctx_()
@@ -142,11 +186,11 @@ test('server__output', ()=>{
142
186
  is_prod__set(app_ctx, false)
143
187
  equal(server__output$_(middleware_ctx)._, undefined)
144
188
  equal(server__output_(middleware_ctx), undefined)
145
- server__metafile__set(app_ctx, server_metafile0)
189
+ server__metafile__set(app_ctx, server__metafile0)
146
190
  equal(server__output$_(middleware_ctx)._, undefined)
147
191
  equal(server__output_(middleware_ctx), undefined)
148
192
  server__output__relative_path__set(middleware_ctx, 'dist/server--dev/index.server-SVR0SVR0.js')
149
- equal(server_metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'], {
193
+ equal(server__metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'], {
150
194
  'imports': [],
151
195
  'exports': [],
152
196
  'entryPoint': 'src/app/index.server.ts',
@@ -158,8 +202,8 @@ test('server__output', ()=>{
158
202
  },
159
203
  'bytes': 98
160
204
  })
161
- equal(server__output$_(middleware_ctx)._, server_metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'])
162
- equal(server__output_(middleware_ctx), server_metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'])
205
+ equal(server__output$_(middleware_ctx)._, server__metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'])
206
+ equal(server__output_(middleware_ctx), server__metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'])
163
207
  // @ts-expect-error TS2345
164
208
  throws(()=>server__output$_(app_ctx))
165
209
  // @ts-expect-error TS2345
@@ -170,25 +214,27 @@ test('server__cssBundle__relative_path', ()=>{
170
214
  is_prod__set(app_ctx, false)
171
215
  equal(server__cssBundle__relative_path$_(middleware_ctx)._, undefined)
172
216
  equal(server__cssBundle__relative_path_(middleware_ctx), undefined)
173
- server__metafile__set(app_ctx, server_metafile0)
217
+ server__metafile__set(app_ctx, server__metafile0)
174
218
  equal(server__cssBundle__relative_path$_(middleware_ctx)._, undefined)
175
219
  equal(server__cssBundle__relative_path_(middleware_ctx), undefined)
176
220
  server__output__relative_path__set(middleware_ctx, 'dist/server--dev/index.server-SVR0SVR0.js')
177
- equal(server_metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'].cssBundle, 'dist/server--dev/index.server-SVR0SVR0.css')
221
+ equal(server__metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'].cssBundle,
222
+ 'dist/server--dev/index.server-SVR0SVR0.css')
178
223
  equal(server__cssBundle__relative_path$_(middleware_ctx)._, 'dist/server--dev/index.server-SVR0SVR0.css')
179
224
  equal(server__cssBundle__relative_path_(middleware_ctx), 'dist/server--dev/index.server-SVR0SVR0.css')
180
- server__metafile__set(app_ctx, server_metafile1)
225
+ server__metafile__set(app_ctx, server__metafile1)
181
226
  equal(server__cssBundle__relative_path$_(middleware_ctx)._, undefined)
182
227
  equal(server__cssBundle__relative_path_(middleware_ctx), undefined)
183
228
  server__output__relative_path__set(middleware_ctx, 'dist/server--dev/index.server-SVR1SVR1.js')
184
- equal(server_metafile1.outputs['dist/server--dev/index.server-SVR1SVR1.js'].cssBundle, 'dist/server--dev/index.server-SVR1SVR1.css')
229
+ equal(server__metafile1.outputs['dist/server--dev/index.server-SVR1SVR1.js'].cssBundle,
230
+ 'dist/server--dev/index.server-SVR1SVR1.css')
185
231
  equal(server__cssBundle__relative_path$_(middleware_ctx)._, 'dist/server--dev/index.server-SVR1SVR1.css')
186
232
  equal(server__cssBundle__relative_path_(middleware_ctx), 'dist/server--dev/index.server-SVR1SVR1.css')
187
- server__metafile__set(app_ctx, server_metafile2)
233
+ server__metafile__set(app_ctx, server__metafile2)
188
234
  equal(server__cssBundle__relative_path$_(middleware_ctx)._, undefined)
189
235
  equal(server__cssBundle__relative_path_(middleware_ctx), undefined)
190
236
  server__output__relative_path__set(middleware_ctx, 'dist/server--dev/index.server-SVR2SVR2.js')
191
- equal(server_metafile2.outputs['dist/server--dev/index.server-SVR2SVR2.js'].cssBundle, undefined)
237
+ equal(server__metafile2.outputs['dist/server--dev/index.server-SVR2SVR2.js'].cssBundle, undefined)
192
238
  equal(server__cssBundle__relative_path$_(middleware_ctx)._, undefined)
193
239
  equal(server__cssBundle__relative_path_(middleware_ctx), undefined)
194
240
  // @ts-expect-error TS2345
@@ -204,25 +250,27 @@ test('server__cssBundle', ()=>{
204
250
  equal(server_path_(app_ctx), '/cwd/dist/server--dev')
205
251
  equal(server__cssBundle$_(middleware_ctx)._, undefined)
206
252
  equal(server__cssBundle_(middleware_ctx), undefined)
207
- server__metafile__set(app_ctx, server_metafile0)
253
+ server__metafile__set(app_ctx, server__metafile0)
208
254
  equal(server__cssBundle$_(middleware_ctx)._, undefined)
209
255
  equal(server__cssBundle_(middleware_ctx), undefined)
210
256
  server__output__relative_path__set(middleware_ctx, 'dist/server--dev/index.server-SVR0SVR0.js')
211
- equal(server_metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'].cssBundle, 'dist/server--dev/index.server-SVR0SVR0.css')
257
+ equal(server__metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'].cssBundle,
258
+ 'dist/server--dev/index.server-SVR0SVR0.css')
212
259
  equal(server__cssBundle$_(middleware_ctx)._, '/cwd/dist/server--dev/index.server-SVR0SVR0.css')
213
260
  equal(server__cssBundle_(middleware_ctx), '/cwd/dist/server--dev/index.server-SVR0SVR0.css')
214
- server__metafile__set(app_ctx, server_metafile1)
261
+ server__metafile__set(app_ctx, server__metafile1)
215
262
  equal(server__cssBundle$_(middleware_ctx)._, undefined)
216
263
  equal(server__cssBundle_(middleware_ctx), undefined)
217
264
  server__output__relative_path__set(middleware_ctx, 'dist/server--dev/index.server-SVR1SVR1.js')
218
- equal(server_metafile1.outputs['dist/server--dev/index.server-SVR1SVR1.js'].cssBundle, 'dist/server--dev/index.server-SVR1SVR1.css')
265
+ equal(server__metafile1.outputs['dist/server--dev/index.server-SVR1SVR1.js'].cssBundle,
266
+ 'dist/server--dev/index.server-SVR1SVR1.css')
219
267
  equal(server__cssBundle$_(middleware_ctx)._, '/cwd/dist/server--dev/index.server-SVR1SVR1.css')
220
268
  equal(server__cssBundle_(middleware_ctx), '/cwd/dist/server--dev/index.server-SVR1SVR1.css')
221
- server__metafile__set(app_ctx, server_metafile2)
269
+ server__metafile__set(app_ctx, server__metafile2)
222
270
  equal(server__cssBundle$_(middleware_ctx)._, undefined)
223
271
  equal(server__cssBundle_(middleware_ctx), undefined)
224
272
  server__output__relative_path__set(middleware_ctx, 'dist/server--dev/index.server-SVR2SVR2.js')
225
- equal(server_metafile2.outputs['dist/server--dev/index.server-SVR2SVR2.js'].cssBundle, undefined)
273
+ equal(server__metafile2.outputs['dist/server--dev/index.server-SVR2SVR2.js'].cssBundle, undefined)
226
274
  equal(server__cssBundle$_(middleware_ctx)._, undefined)
227
275
  equal(server__cssBundle_(middleware_ctx), undefined)
228
276
  // @ts-expect-error TS2345
@@ -238,25 +286,27 @@ test('server__css', ()=>{
238
286
  equal(server_path_(app_ctx), '/cwd/dist/server--dev')
239
287
  equal(server__css$_(middleware_ctx)._, undefined)
240
288
  equal(server__css_(middleware_ctx), undefined)
241
- server__metafile__set(app_ctx, server_metafile0)
289
+ server__metafile__set(app_ctx, server__metafile0)
242
290
  equal(server__css$_(middleware_ctx)._, undefined)
243
291
  equal(server__css_(middleware_ctx), undefined)
244
292
  server__output__relative_path__set(middleware_ctx, 'dist/server--dev/index.server-SVR0SVR0.js')
245
- equal(server_metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'].cssBundle, 'dist/server--dev/index.server-SVR0SVR0.css')
293
+ equal(server__metafile0.outputs['dist/server--dev/index.server-SVR0SVR0.js'].cssBundle,
294
+ 'dist/server--dev/index.server-SVR0SVR0.css')
246
295
  equal(server__css$_(middleware_ctx)._, '/index.server-SVR0SVR0.css')
247
296
  equal(server__css_(middleware_ctx), '/index.server-SVR0SVR0.css')
248
- server__metafile__set(app_ctx, server_metafile1)
297
+ server__metafile__set(app_ctx, server__metafile1)
249
298
  equal(server__css$_(middleware_ctx)._, undefined)
250
299
  equal(server__css_(middleware_ctx), undefined)
251
300
  server__output__relative_path__set(middleware_ctx, 'dist/server--dev/index.server-SVR1SVR1.js')
252
- equal(server_metafile1.outputs['dist/server--dev/index.server-SVR1SVR1.js'].cssBundle, 'dist/server--dev/index.server-SVR1SVR1.css')
301
+ equal(server__metafile1.outputs['dist/server--dev/index.server-SVR1SVR1.js'].cssBundle,
302
+ 'dist/server--dev/index.server-SVR1SVR1.css')
253
303
  equal(server__css$_(middleware_ctx)._, '/index.server-SVR1SVR1.css')
254
304
  equal(server__css_(middleware_ctx), '/index.server-SVR1SVR1.css')
255
- server__metafile__set(app_ctx, server_metafile2)
305
+ server__metafile__set(app_ctx, server__metafile2)
256
306
  equal(server__css$_(middleware_ctx)._, undefined)
257
307
  equal(server__css_(middleware_ctx), undefined)
258
308
  server__output__relative_path__set(middleware_ctx, 'dist/server--dev/index.server-SVR2SVR2.js')
259
- equal(server_metafile2.outputs['dist/server--dev/index.server-SVR2SVR2.js'].cssBundle, undefined)
309
+ equal(server__metafile2.outputs['dist/server--dev/index.server-SVR2SVR2.js'].cssBundle, undefined)
260
310
  equal(server__css$_(middleware_ctx)._, undefined)
261
311
  equal(server__css_(middleware_ctx), undefined)
262
312
  // @ts-expect-error TS2345