@absolutejs/absolute 0.20.0-beta.167 → 0.20.0-beta.168

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.
Files changed (57) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +81 -0
  3. package/changelog.json +24 -0
  4. package/dist/angular/browser.js +3 -3
  5. package/dist/angular/browser.js.map +3 -3
  6. package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
  7. package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
  8. package/dist/angular/index.js +211 -197
  9. package/dist/angular/index.js.map +8 -8
  10. package/dist/angular/server.js +211 -197
  11. package/dist/angular/server.js.map +8 -8
  12. package/dist/build.js +1324 -998
  13. package/dist/build.js.map +12 -8
  14. package/dist/cli/{compile-30m09382.js → compile-ckn6epbb.js} +1 -1
  15. package/dist/cli/config/server.js +125 -112
  16. package/dist/cli/{index-vkba3289.js → index-8ez1ccm0.js} +1 -1
  17. package/dist/cli/index.js +6 -6
  18. package/dist/cli/{islands-rq6wx0kh.js → islands-8sgky9gh.js} +1 -1
  19. package/dist/cli/{mobile-41sev6v0.js → mobile-ddggpe53.js} +2 -2
  20. package/dist/cli/{start-0ebxkwga.js → start-qj7664zr.js} +2 -2
  21. package/dist/cli/{typecheck-7yhekrc0.js → typecheck-8sdrcjz8.js} +208 -42
  22. package/dist/client/index.js +8 -3
  23. package/dist/client/index.js.map +4 -4
  24. package/dist/index.js +1402 -1075
  25. package/dist/index.js.map +14 -10
  26. package/dist/islands/browser.js +3 -3
  27. package/dist/islands/browser.js.map +3 -3
  28. package/dist/islands/index.js +3 -3
  29. package/dist/islands/index.js.map +3 -3
  30. package/dist/react/browser.js +3 -3
  31. package/dist/react/browser.js.map +3 -3
  32. package/dist/react/index.js +231 -217
  33. package/dist/react/index.js.map +9 -9
  34. package/dist/react/server.js +231 -191
  35. package/dist/react/server.js.map +9 -8
  36. package/dist/src/build/islandBootstrap.d.ts +22 -0
  37. package/dist/src/build/missingClientFrameworks.d.ts +29 -0
  38. package/dist/src/build/svelteDeclarations.d.ts +27 -0
  39. package/dist/src/client/islandResolver.d.ts +3 -1
  40. package/dist/src/core/build.d.ts +1 -1
  41. package/dist/src/core/islandManifest.d.ts +10 -0
  42. package/dist/src/core/islandPageContext.d.ts +2 -0
  43. package/dist/src/dev/svelteDeclarationRefresher.d.ts +6 -0
  44. package/dist/svelte/browser.js +3 -3
  45. package/dist/svelte/browser.js.map +3 -3
  46. package/dist/svelte/index.js +211 -197
  47. package/dist/svelte/index.js.map +8 -8
  48. package/dist/svelte/server.js +211 -171
  49. package/dist/svelte/server.js.map +8 -7
  50. package/dist/vue/browser.js +3 -3
  51. package/dist/vue/browser.js.map +3 -3
  52. package/dist/vue/index.js +231 -217
  53. package/dist/vue/index.js.map +9 -9
  54. package/dist/vue/server.js +231 -191
  55. package/dist/vue/server.js.map +9 -8
  56. package/package.json +6 -1
  57. /package/dist/cli/{index-e6ysp900.js → index-z794p5qg.js} +0 -0
@@ -6,7 +6,7 @@ import {
6
6
  } from "./index-bp60baze.js";
7
7
  import {
8
8
  loadIslandRegistryBuildInfo
9
- } from "./index-e6ysp900.js";
9
+ } from "./index-z794p5qg.js";
10
10
  import {
11
11
  createIslandRegistryDefinitionPlugin,
12
12
  createBunStringRawUnicodePlugin,
@@ -37183,14 +37183,133 @@ var TIME_PRECISION = 2;
37183
37183
  var TWO_THIRDS = 2 / 3;
37184
37184
  var UNFOUND_INDEX = -1;
37185
37185
 
37186
+ // src/utils/getDurationString.ts
37187
+ var getDurationString = (duration) => {
37188
+ let durationString;
37189
+ if (duration < MILLISECONDS_IN_A_SECOND) {
37190
+ durationString = `${duration.toFixed(TIME_PRECISION)}ms`;
37191
+ } else if (duration < MILLISECONDS_IN_A_MINUTE) {
37192
+ durationString = `${(duration / MILLISECONDS_IN_A_SECOND).toFixed(TIME_PRECISION)}s`;
37193
+ } else {
37194
+ const totalSeconds = Math.round(duration / MILLISECONDS_IN_A_SECOND);
37195
+ const minutes = Math.floor(totalSeconds / 60);
37196
+ const seconds = totalSeconds % 60;
37197
+ durationString = seconds === 0 ? `${minutes}m` : `${minutes}m ${seconds}s`;
37198
+ }
37199
+ return durationString;
37200
+ };
37201
+
37202
+ // src/utils/startupBanner.ts
37203
+ var colors = {
37204
+ bold: "\x1B[1m",
37205
+ cyan: "\x1B[36m",
37206
+ dim: "\x1B[2m",
37207
+ green: "\x1B[32m",
37208
+ reset: "\x1B[0m"
37209
+ };
37210
+ var MONTHS = [
37211
+ "Jan",
37212
+ "Feb",
37213
+ "Mar",
37214
+ "Apr",
37215
+ "May",
37216
+ "Jun",
37217
+ "Jul",
37218
+ "Aug",
37219
+ "Sep",
37220
+ "Oct",
37221
+ "Nov",
37222
+ "Dec"
37223
+ ];
37224
+ var formatTimestamp = () => {
37225
+ const now = new Date;
37226
+ const month = MONTHS[now.getMonth()];
37227
+ const day = now.getDate().toString().padStart(2, "0");
37228
+ let hours = now.getHours();
37229
+ const minutes = now.getMinutes().toString().padStart(2, "0");
37230
+ const seconds = now.getSeconds().toString().padStart(2, "0");
37231
+ const ampm = hours >= HOURS_IN_HALF_DAY ? "PM" : "AM";
37232
+ hours = hours % HOURS_IN_HALF_DAY || HOURS_IN_HALF_DAY;
37233
+ return `${month} ${day} ${hours}:${minutes}:${seconds} ${ampm}`;
37234
+ };
37235
+ var startupBanner = (options) => {
37236
+ const {
37237
+ version,
37238
+ readyDuration,
37239
+ buildDuration,
37240
+ port,
37241
+ host,
37242
+ networkUrl,
37243
+ mobilePreviewUrl,
37244
+ protocol = "http"
37245
+ } = options;
37246
+ const name = `${colors.cyan}${colors.bold}ABSOLUTEJS${colors.reset}`;
37247
+ const ver = `${colors.dim}v${version}${colors.reset}`;
37248
+ const time = `${colors.dim}ready in${colors.reset} ${colors.bold}${getDurationString(readyDuration)}${colors.reset}`;
37249
+ const build = typeof buildDuration === "number" && Number.isFinite(buildDuration) ? ` ${colors.dim}(build ${getDurationString(buildDuration)})${colors.reset}` : "";
37250
+ console.log("");
37251
+ console.log(` ${name} ${ver} ${time}${build}`);
37252
+ console.log("");
37253
+ console.log(` ${colors.green}\u279C${colors.reset} ${colors.bold}Local:${colors.reset} ${protocol}://${host === "0.0.0.0" ? "localhost" : host}:${port}/`);
37254
+ if (networkUrl) {
37255
+ console.log(` ${colors.green}\u279C${colors.reset} ${colors.bold}Network:${colors.reset} ${networkUrl}`);
37256
+ }
37257
+ if (mobilePreviewUrl) {
37258
+ console.log(` ${colors.green}\u279C${colors.reset} ${colors.bold}Mobile:${colors.reset} ${mobilePreviewUrl}`);
37259
+ }
37260
+ console.log("");
37261
+ };
37262
+
37263
+ // src/utils/logger.ts
37264
+ var colors2 = {
37265
+ blue: "\x1B[34m",
37266
+ bold: "\x1B[1m",
37267
+ cyan: "\x1B[36m",
37268
+ dim: "\x1B[2m",
37269
+ green: "\x1B[32m",
37270
+ magenta: "\x1B[35m",
37271
+ red: "\x1B[31m",
37272
+ reset: "\x1B[0m",
37273
+ white: "\x1B[37m",
37274
+ yellow: "\x1B[33m"
37275
+ };
37276
+ var frameworkColors = {
37277
+ angular: colors2.magenta,
37278
+ assets: colors2.dim,
37279
+ css: colors2.cyan,
37280
+ html: colors2.white,
37281
+ htmx: colors2.white,
37282
+ react: colors2.blue,
37283
+ svelte: colors2.yellow,
37284
+ vue: colors2.green
37285
+ };
37286
+ var logWarn = (message) => {
37287
+ const timestamp = `${colors2.dim}${formatTimestamp()}${colors2.reset}`;
37288
+ const tag = `${colors2.yellow}[hmr]${colors2.reset}`;
37289
+ console.log(`${timestamp} ${tag} ${colors2.yellow}warning ${message}${colors2.reset}`);
37290
+ };
37291
+
37292
+ // src/core/islandManifest.ts
37293
+ var ISLAND_BOOTSTRAP_MANIFEST_KEY = "AbsoluteIslandBootstrap";
37294
+ var LEGACY_ISLAND_BOOTSTRAP_MANIFEST_KEY = "BootstrapClient";
37295
+ var getIslandBootstrapPath = (manifest) => manifest[ISLAND_BOOTSTRAP_MANIFEST_KEY] ?? manifest[LEGACY_ISLAND_BOOTSTRAP_MANIFEST_KEY];
37296
+
37186
37297
  // src/core/islandPageContext.ts
37187
- var BOOTSTRAP_MANIFEST_KEY = "BootstrapClient";
37188
37298
  var ISLAND_MARKER = 'data-island="true"';
37189
37299
  var CLOSING_HEAD_TAG = "</head>";
37300
+ var warnedMissingBootstrap = false;
37301
+ var warnIfBootstrapMissing = (manifest) => {
37302
+ if (warnedMissingBootstrap || getIslandBootstrapPath(manifest))
37303
+ return;
37304
+ if (false)
37305
+ ;
37306
+ warnedMissingBootstrap = true;
37307
+ logWarn("A page contains islands, but the build manifest has no islands bootstrap, so they will render without hydrating. Set `islands.registry` in absolute.config.ts (a default bootstrap is generated from it) or point `islands.bootstrap` at a file that calls startIslands().");
37308
+ };
37190
37309
  var buildIslandsHeadMarkup = (manifest) => {
37191
37310
  const manifestScript = `<script>window.__ABSOLUTE_MANIFEST__ = ${JSON.stringify(manifest)}</script>`;
37192
37311
  const islandStateScript = `<script>window.__ABS_ISLAND_STATE__ = ${JSON.stringify(globalThis.__ABS_ISLAND_STATE__ ?? {})}</script>`;
37193
- const bootstrapPath = manifest[BOOTSTRAP_MANIFEST_KEY];
37312
+ const bootstrapPath = getIslandBootstrapPath(manifest);
37194
37313
  const bootstrapScript = bootstrapPath ? `<script type="module" src="${bootstrapPath}"></script>` : "";
37195
37314
  return `${manifestScript}${islandStateScript}${bootstrapScript}`;
37196
37315
  };
@@ -37299,7 +37418,7 @@ var pipeStreamWithHeadInjection = (stream, markup) => {
37299
37418
  }
37300
37419
  });
37301
37420
  };
37302
- var pipeStreamWithIslandMarkerDetection = (stream, markup) => {
37421
+ var pipeStreamWithIslandMarkerDetection = (stream, markup, onIslandsDetected) => {
37303
37422
  const encoder = new TextEncoder;
37304
37423
  const decoder = new TextDecoder;
37305
37424
  const headLookbehind = CLOSING_HEAD_TAG.length - 1;
@@ -37312,6 +37431,7 @@ var pipeStreamWithIslandMarkerDetection = (stream, markup) => {
37312
37431
  if (!held.includes(ISLAND_MARKER)) {
37313
37432
  return { held, injected: false, pending: "", sawHead: true };
37314
37433
  }
37434
+ onIslandsDetected();
37315
37435
  enqueue(controller, `${markup}${held}`);
37316
37436
  return { held: "", injected: true, pending: "", sawHead: true };
37317
37437
  };
@@ -37377,12 +37497,13 @@ var injectIslandPageContextStream = (stream, options) => {
37377
37497
  return stream;
37378
37498
  const markup = buildIslandsHeadMarkup(manifest);
37379
37499
  if (options?.hasIslands === true) {
37500
+ warnIfBootstrapMissing(manifest);
37380
37501
  return pipeStreamWithHeadInjection(stream, markup);
37381
37502
  }
37382
37503
  if (options?.hasIslands === false) {
37383
37504
  return stream;
37384
37505
  }
37385
- return pipeStreamWithIslandMarkerDetection(stream, markup);
37506
+ return pipeStreamWithIslandMarkerDetection(stream, markup, () => warnIfBootstrapMissing(manifest));
37386
37507
  };
37387
37508
 
37388
37509
  // src/core/devRouteRegistrationCallsite.ts
@@ -38736,114 +38857,6 @@ var withRegisteredStreamingSlots = async (renderResponse, options = {}) => {
38736
38857
 
38737
38858
  // src/core/streamingSlotWarningScope.ts
38738
38859
  import { AsyncLocalStorage as AsyncLocalStorage2 } from "async_hooks";
38739
-
38740
- // src/utils/getDurationString.ts
38741
- var getDurationString = (duration) => {
38742
- let durationString;
38743
- if (duration < MILLISECONDS_IN_A_SECOND) {
38744
- durationString = `${duration.toFixed(TIME_PRECISION)}ms`;
38745
- } else if (duration < MILLISECONDS_IN_A_MINUTE) {
38746
- durationString = `${(duration / MILLISECONDS_IN_A_SECOND).toFixed(TIME_PRECISION)}s`;
38747
- } else {
38748
- const totalSeconds = Math.round(duration / MILLISECONDS_IN_A_SECOND);
38749
- const minutes = Math.floor(totalSeconds / 60);
38750
- const seconds = totalSeconds % 60;
38751
- durationString = seconds === 0 ? `${minutes}m` : `${minutes}m ${seconds}s`;
38752
- }
38753
- return durationString;
38754
- };
38755
-
38756
- // src/utils/startupBanner.ts
38757
- var colors = {
38758
- bold: "\x1B[1m",
38759
- cyan: "\x1B[36m",
38760
- dim: "\x1B[2m",
38761
- green: "\x1B[32m",
38762
- reset: "\x1B[0m"
38763
- };
38764
- var MONTHS = [
38765
- "Jan",
38766
- "Feb",
38767
- "Mar",
38768
- "Apr",
38769
- "May",
38770
- "Jun",
38771
- "Jul",
38772
- "Aug",
38773
- "Sep",
38774
- "Oct",
38775
- "Nov",
38776
- "Dec"
38777
- ];
38778
- var formatTimestamp = () => {
38779
- const now = new Date;
38780
- const month = MONTHS[now.getMonth()];
38781
- const day = now.getDate().toString().padStart(2, "0");
38782
- let hours = now.getHours();
38783
- const minutes = now.getMinutes().toString().padStart(2, "0");
38784
- const seconds = now.getSeconds().toString().padStart(2, "0");
38785
- const ampm = hours >= HOURS_IN_HALF_DAY ? "PM" : "AM";
38786
- hours = hours % HOURS_IN_HALF_DAY || HOURS_IN_HALF_DAY;
38787
- return `${month} ${day} ${hours}:${minutes}:${seconds} ${ampm}`;
38788
- };
38789
- var startupBanner = (options) => {
38790
- const {
38791
- version,
38792
- readyDuration,
38793
- buildDuration,
38794
- port,
38795
- host,
38796
- networkUrl,
38797
- mobilePreviewUrl,
38798
- protocol = "http"
38799
- } = options;
38800
- const name = `${colors.cyan}${colors.bold}ABSOLUTEJS${colors.reset}`;
38801
- const ver = `${colors.dim}v${version}${colors.reset}`;
38802
- const time = `${colors.dim}ready in${colors.reset} ${colors.bold}${getDurationString(readyDuration)}${colors.reset}`;
38803
- const build = typeof buildDuration === "number" && Number.isFinite(buildDuration) ? ` ${colors.dim}(build ${getDurationString(buildDuration)})${colors.reset}` : "";
38804
- console.log("");
38805
- console.log(` ${name} ${ver} ${time}${build}`);
38806
- console.log("");
38807
- console.log(` ${colors.green}\u279C${colors.reset} ${colors.bold}Local:${colors.reset} ${protocol}://${host === "0.0.0.0" ? "localhost" : host}:${port}/`);
38808
- if (networkUrl) {
38809
- console.log(` ${colors.green}\u279C${colors.reset} ${colors.bold}Network:${colors.reset} ${networkUrl}`);
38810
- }
38811
- if (mobilePreviewUrl) {
38812
- console.log(` ${colors.green}\u279C${colors.reset} ${colors.bold}Mobile:${colors.reset} ${mobilePreviewUrl}`);
38813
- }
38814
- console.log("");
38815
- };
38816
-
38817
- // src/utils/logger.ts
38818
- var colors2 = {
38819
- blue: "\x1B[34m",
38820
- bold: "\x1B[1m",
38821
- cyan: "\x1B[36m",
38822
- dim: "\x1B[2m",
38823
- green: "\x1B[32m",
38824
- magenta: "\x1B[35m",
38825
- red: "\x1B[31m",
38826
- reset: "\x1B[0m",
38827
- white: "\x1B[37m",
38828
- yellow: "\x1B[33m"
38829
- };
38830
- var frameworkColors = {
38831
- angular: colors2.magenta,
38832
- assets: colors2.dim,
38833
- css: colors2.cyan,
38834
- html: colors2.white,
38835
- htmx: colors2.white,
38836
- react: colors2.blue,
38837
- svelte: colors2.yellow,
38838
- vue: colors2.green
38839
- };
38840
- var logWarn = (message) => {
38841
- const timestamp = `${colors2.dim}${formatTimestamp()}${colors2.reset}`;
38842
- const tag = `${colors2.yellow}[hmr]${colors2.reset}`;
38843
- console.log(`${timestamp} ${tag} ${colors2.yellow}warning ${message}${colors2.reset}`);
38844
- };
38845
-
38846
- // src/core/streamingSlotWarningScope.ts
38847
38860
  var STREAMING_SLOT_WARNING_STORAGE_KEY2 = Symbol.for("absolutejs.streamingSlotWarningAsyncLocalStorage");
38848
38861
  var isObjectRecord3 = (value) => Boolean(value) && typeof value === "object";
38849
38862
  var isAsyncLocalStorage3 = (value) => isObjectRecord3(value) && ("getStore" in value) && typeof value.getStore === "function" && ("run" in value) && typeof value.run === "function";
@@ -11,7 +11,7 @@ import {
11
11
  } from "./index-71gchbzt.js";
12
12
  import {
13
13
  loadIslandRegistryBuildInfo
14
- } from "./index-e6ysp900.js";
14
+ } from "./index-z794p5qg.js";
15
15
  import {
16
16
  createIslandRegistryDefinitionPlugin,
17
17
  createBunStringRawUnicodePlugin,
package/dist/cli/index.js CHANGED
@@ -70,7 +70,7 @@ if (command === "dev") {
70
70
  const configPath = parseNamedArg("--config");
71
71
  const positionalArgs = stripNamedArgs("--outdir", "--config").filter((arg) => arg !== "--prebuilt");
72
72
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
73
- const { start } = await import("./start-0ebxkwga.js");
73
+ const { start } = await import("./start-qj7664zr.js");
74
74
  await start(serverEntry, outdir, configPath, {
75
75
  prebuilt: args.includes("--prebuilt")
76
76
  });
@@ -80,7 +80,7 @@ if (command === "dev") {
80
80
  const configPath = parseNamedArg("--config");
81
81
  const positionalArgs = stripNamedArgs("--outdir", "--config");
82
82
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
83
- const { start } = await import("./start-0ebxkwga.js");
83
+ const { start } = await import("./start-qj7664zr.js");
84
84
  await start(serverEntry, outdir, configPath, { prepareOnly: true });
85
85
  } else if (command === "build") {
86
86
  sendTelemetryEvent("cli:command", { command });
@@ -188,7 +188,7 @@ if (command === "dev") {
188
188
  await runInspect(args);
189
189
  } else if (command === "islands") {
190
190
  sendTelemetryEvent("cli:command", { command: "islands" });
191
- const { runIslands } = await import("./islands-rq6wx0kh.js");
191
+ const { runIslands } = await import("./islands-8sgky9gh.js");
192
192
  await runIslands(args);
193
193
  } else if (command === "info") {
194
194
  sendTelemetryEvent("cli:command", { command });
@@ -205,13 +205,13 @@ if (command === "dev") {
205
205
  const configPath = parseNamedArg("--config");
206
206
  const positionalArgs = stripNamedArgs("--outdir", "--outfile", "--config");
207
207
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
208
- const { compile } = await import("./compile-30m09382.js");
208
+ const { compile } = await import("./compile-ckn6epbb.js");
209
209
  await compile(serverEntry, outdir, outfile, configPath);
210
210
  } else if (command === "mobile") {
211
211
  sendTelemetryEvent("cli:command", {
212
212
  command: `mobile:${workspaceCommand ?? "unknown"}`
213
213
  });
214
- const { runMobile } = await import("./mobile-41sev6v0.js");
214
+ const { runMobile } = await import("./mobile-ddggpe53.js");
215
215
  try {
216
216
  await runMobile(args);
217
217
  } catch (error) {
@@ -221,7 +221,7 @@ if (command === "dev") {
221
221
  } else if (command === "typecheck") {
222
222
  sendTelemetryEvent("cli:command", { command });
223
223
  const configPath = parseNamedArg("--config");
224
- const { typecheck } = await import("./typecheck-7yhekrc0.js");
224
+ const { typecheck } = await import("./typecheck-8sdrcjz8.js");
225
225
  await typecheck(configPath);
226
226
  } else if (command === "migrate") {
227
227
  sendTelemetryEvent("cli:command", { command });
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  getIslandManifestKey,
4
4
  loadIslandRegistryBuildInfo
5
- } from "./index-e6ysp900.js";
5
+ } from "./index-z794p5qg.js";
6
6
  import {
7
7
  loadConfig
8
8
  } from "./index-h7qhz02e.js";
@@ -76,10 +76,10 @@ import {
76
76
  parseIosSimulators2,
77
77
  repairAbsoluteIosDevSession2
78
78
  } from "./index-6ps18fvr.js";
79
- import"./index-e6ysp900.js";
79
+ import"./index-z794p5qg.js";
80
80
  import {
81
81
  start2
82
- } from "./index-vkba3289.js";
82
+ } from "./index-8ez1ccm0.js";
83
83
  import {
84
84
  captureAbsoluteRemoteMacCommand2,
85
85
  getAbsoluteRemoteMacProfile2,
@@ -1,9 +1,9 @@
1
1
  // @bun
2
2
  import {
3
3
  start2
4
- } from "./index-vkba3289.js";
4
+ } from "./index-8ez1ccm0.js";
5
5
  import"./index-j7m8pq48.js";
6
- import"./index-e6ysp900.js";
6
+ import"./index-z794p5qg.js";
7
7
  import"./index-71gchbzt.js";
8
8
  import"./index-h7qhz02e.js";
9
9
  import"./index-qyxd5n9a.js";