@absolutejs/absolute 0.20.0-beta.176 → 0.20.0-beta.178

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 (82) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/changelog.json +62 -0
  3. package/dist/angular/browser.js +17 -2
  4. package/dist/angular/browser.js.map +4 -4
  5. package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
  6. package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
  7. package/dist/angular/index.js +57 -33
  8. package/dist/angular/index.js.map +9 -8
  9. package/dist/angular/server.js +57 -33
  10. package/dist/angular/server.js.map +9 -8
  11. package/dist/build.js +532 -416
  12. package/dist/build.js.map +15 -15
  13. package/dist/cli/{compile-w2z6c9vt.js → compile-p5yv6ecp.js} +2 -2
  14. package/dist/cli/config/server.js +45 -12
  15. package/dist/cli/{dev-8br5mr7t.js → dev-2hbcsvkp.js} +1 -1
  16. package/dist/cli/{index-420h9hq7.js → index-1ewba8ye.js} +32 -3
  17. package/dist/cli/{index-7z1hh3fg.js → index-9dzdbbfc.js} +1 -1
  18. package/dist/cli/index.js +7 -7
  19. package/dist/cli/{islands-bx67g15t.js → islands-6zgb7501.js} +1 -1
  20. package/dist/cli/{mobile-we5q51ey.js → mobile-c92dh8s2.js} +2 -2
  21. package/dist/cli/{start-srs11bm8.js → start-asxb79rc.js} +2 -2
  22. package/dist/cli/{typecheck-7fvww3b7.js → typecheck-m2j4tkdk.js} +165 -35
  23. package/dist/client/chunks/{index-8m2qq61n.js → index-58svs66p.js} +13 -3
  24. package/dist/client/chunks/{index-8m2qq61n.js.map → index-58svs66p.js.map} +5 -4
  25. package/dist/client/chunks/{islands-mfjmdwnb.js → islands-tcadmgcx.js} +3 -6
  26. package/dist/client/chunks/{islands-mfjmdwnb.js.map → islands-tcadmgcx.js.map} +3 -4
  27. package/dist/client/chunks/{react-sprprqzs.js → react-khr6ewhr.js} +2 -2
  28. package/dist/client/index.js +82 -6
  29. package/dist/client/index.js.map +7 -6
  30. package/dist/dev/client/handlers/islands.ts +2 -0
  31. package/dist/dev/client/handlers/react.ts +92 -111
  32. package/dist/dev/client/handlers/reactUpdateQueue.ts +153 -0
  33. package/dist/index.js +506 -389
  34. package/dist/index.js.map +16 -16
  35. package/dist/islands/browser.js +2 -2
  36. package/dist/islands/browser.js.map +3 -3
  37. package/dist/islands/index.js +13 -6
  38. package/dist/islands/index.js.map +6 -5
  39. package/dist/react/browser.js +113 -12
  40. package/dist/react/browser.js.map +10 -7
  41. package/dist/react/components/index.js +31 -7
  42. package/dist/react/components/index.js.map +5 -4
  43. package/dist/react/components/server/index.js +22 -6
  44. package/dist/react/index.js +190 -46
  45. package/dist/react/index.js.map +15 -11
  46. package/dist/react/server.js +82 -23
  47. package/dist/react/server.js.map +11 -9
  48. package/dist/src/build/compileSvelte.d.ts +12 -1
  49. package/dist/src/build/compileVue.d.ts +1 -0
  50. package/dist/src/build/islandEntries.d.ts +3 -1
  51. package/dist/src/cli/scripts/typecheck.d.ts +8 -0
  52. package/dist/src/cli/scripts/typecheckDiagnostics.d.ts +17 -0
  53. package/dist/src/client/preserveIslandMarkup.d.ts +4 -0
  54. package/dist/src/core/islandManifest.d.ts +6 -0
  55. package/dist/src/core/islandStylesheet.d.ts +17 -0
  56. package/dist/src/react/Island.d.ts +9 -2
  57. package/dist/src/react/IslandStyleLink.d.ts +11 -0
  58. package/dist/src/react/createIsland.d.ts +1 -1
  59. package/dist/src/react/serverComponents/nodeRendererRef.d.ts +13 -0
  60. package/dist/src/utils/requestRenderUrl.d.ts +1 -0
  61. package/dist/src/utils/resolveConvention.d.ts +1 -0
  62. package/dist/src/vue/Island.browser.d.ts +3 -1
  63. package/dist/src/vue/Island.d.ts +2 -2
  64. package/dist/src/vue/createIsland.browser.d.ts +2 -2
  65. package/dist/src/vue/createIsland.d.ts +2 -2
  66. package/dist/src/vue/islandStyleLink.d.ts +30 -0
  67. package/dist/svelte/browser.js +2 -2
  68. package/dist/svelte/browser.js.map +3 -3
  69. package/dist/svelte/index.js +51 -49
  70. package/dist/svelte/index.js.map +9 -8
  71. package/dist/svelte/server.js +48 -45
  72. package/dist/svelte/server.js.map +8 -7
  73. package/dist/types/globals.d.ts +3 -0
  74. package/dist/vue/browser.js +105 -10
  75. package/dist/vue/browser.js.map +10 -7
  76. package/dist/vue/index.js +170 -47
  77. package/dist/vue/index.js.map +14 -11
  78. package/dist/vue/server.js +81 -22
  79. package/dist/vue/server.js.map +9 -7
  80. package/package.json +1 -1
  81. /package/dist/cli/{index-6522t968.js → index-yd672jyq.js} +0 -0
  82. /package/dist/client/chunks/{react-sprprqzs.js.map → react-khr6ewhr.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- // .angular-partial-tmp-cf87xr/src/core/streamingSlotRegistrar.ts
2
+ // .angular-partial-tmp-1GarPM/src/core/streamingSlotRegistrar.ts
3
3
  var STREAMING_SLOT_REGISTRAR_KEY = Symbol.for("absolutejs.streamingSlotRegistrar");
4
4
  var STREAMING_SLOT_WARNING_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotWarningController");
5
5
  var STREAMING_SLOT_COLLECTION_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotCollectionController");
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- // .angular-partial-tmp-cf87xr/src/core/streamingSlotRegistrar.ts
2
+ // .angular-partial-tmp-1GarPM/src/core/streamingSlotRegistrar.ts
3
3
  var STREAMING_SLOT_REGISTRAR_KEY = Symbol.for("absolutejs.streamingSlotRegistrar");
4
4
  var STREAMING_SLOT_WARNING_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotWarningController");
5
5
  var STREAMING_SLOT_COLLECTION_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotCollectionController");
@@ -46,7 +46,7 @@ var warnMissingStreamingSlotCollector = (primitiveName) => {
46
46
  getWarningController()?.maybeWarn(primitiveName);
47
47
  };
48
48
 
49
- // .angular-partial-tmp-cf87xr/src/core/streamingSlotRegistry.ts
49
+ // .angular-partial-tmp-1GarPM/src/core/streamingSlotRegistry.ts
50
50
  var STREAMING_SLOT_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotAsyncLocalStorage");
51
51
  var isObjectRecord2 = (value) => Boolean(value) && typeof value === "object";
52
52
  var isAsyncLocalStorage = (value) => isObjectRecord2(value) && ("getStore" in value) && typeof value.getStore === "function" && ("run" in value) && typeof value.run === "function";
@@ -328,7 +328,7 @@ var ISLAND_BOOTSTRAP_MANIFEST_KEY = "AbsoluteIslandBootstrap", LEGACY_ISLAND_BOO
328
328
  islands[framework] = entries;
329
329
  }
330
330
  return islands;
331
- }, getIslandManifestKey = (framework, component) => `Island${toIslandFrameworkSegment(framework)}${component}`;
331
+ }, getIslandManifestKey = (framework, component) => `Island${toIslandFrameworkSegment(framework)}${component}`, ISLAND_STYLE_PREFIX = "IslandStyle", getIslandStyleManifestEntries = (manifest) => Object.entries(manifest).filter(([key]) => key.startsWith(ISLAND_STYLE_PREFIX)), getIslandStyleManifestKey = (framework, component) => `${ISLAND_STYLE_PREFIX}${toIslandFrameworkSegment(framework)}${component}`;
332
332
 
333
333
  // src/core/islandPageContext.ts
334
334
  var ISLAND_MARKER = 'data-island="true"', MANIFEST_MARKER = "__ABSOLUTE_MANIFEST__", ISLAND_STATE_MARKER = "__ABS_ISLAND_STATE__", CLOSING_HEAD_TAG = "</head>", warnedMissingBootstrap = false, warnIfBootstrapMissing = (manifest) => {
@@ -365,12 +365,27 @@ var ISLAND_MARKER = 'data-island="true"', MANIFEST_MARKER = "__ABSOLUTE_MANIFEST
365
365
  browserManifest[key] = value;
366
366
  }
367
367
  return browserManifest;
368
- }, buildIslandsHeadMarkup = (manifest) => {
368
+ }, ISLAND_MARKER_TAG, ISLAND_FRAMEWORKS, readMarkerAttribute = (tag, name) => new RegExp(`\\b${name}="([^"]*)"`).exec(tag)?.[1]?.replaceAll("&quot;", '"').replaceAll("&lt;", "<").replaceAll("&gt;", ">").replaceAll("&amp;", "&"), toIslandFramework = (value) => ISLAND_FRAMEWORKS.find((framework) => framework === value), collectRenderedIslandStyleKeys = (html) => {
369
+ const keys = new Set;
370
+ for (const [tag] of html.matchAll(ISLAND_MARKER_TAG)) {
371
+ const framework = toIslandFramework(readMarkerAttribute(tag, "data-framework"));
372
+ const component = readMarkerAttribute(tag, "data-component");
373
+ if (framework && component)
374
+ keys.add(getIslandStyleManifestKey(framework, component));
375
+ }
376
+ return keys;
377
+ }, buildIslandStyleLinks = (manifest, html) => {
378
+ if (html === undefined)
379
+ return "";
380
+ const renderedKeys = collectRenderedIslandStyleKeys(html);
381
+ return getIslandStyleManifestEntries(manifest).filter(([key]) => renderedKeys.has(key)).filter(([, href]) => !html.includes(`href="${href}"`)).map(([key, href]) => `<link rel="stylesheet" href="${href}" data-island-style="${key}"${nonceAttr()}>`).join("");
382
+ }, buildIslandsHeadMarkup = (manifest, html) => {
383
+ const styleLinks = buildIslandStyleLinks(manifest, html);
369
384
  const manifestScript = `<script${nonceAttr()}>window.__ABSOLUTE_MANIFEST__ = ${escapeScriptContent(JSON.stringify(toBrowserManifest(manifest)))}</script>`;
370
385
  const islandStateScript = `<script${nonceAttr()}>window.__ABS_ISLAND_STATE__ = ${escapeScriptContent(JSON.stringify(globalThis.__ABS_ISLAND_STATE__ ?? {}))}</script>`;
371
386
  const bootstrapPath = getIslandBootstrapPath(manifest);
372
387
  const bootstrapScript = bootstrapPath ? `<script${nonceAttr()} type="module" src="${bootstrapPath}"></script>` : "";
373
- return `${manifestScript}${islandStateScript}${bootstrapScript}`;
388
+ return `${styleLinks}${manifestScript}${islandStateScript}${bootstrapScript}`;
374
389
  }, injectHeadMarkup = (html, markup) => {
375
390
  const closingHeadIndex = html.indexOf("</head>");
376
391
  if (closingHeadIndex >= 0) {
@@ -552,7 +567,7 @@ var ISLAND_MARKER = 'data-island="true"', MANIFEST_MARKER = "__ABSOLUTE_MANIFEST
552
567
  return html;
553
568
  }
554
569
  warnIfBootstrapMissing(manifest);
555
- return injectHeadMarkup(html, buildIslandsHeadMarkup(manifest));
570
+ return injectHeadMarkup(html, buildIslandsHeadMarkup(manifest, html));
556
571
  }, injectIslandPageContextStream = (stream, options) => {
557
572
  const manifest = globalThis.__absoluteManifest;
558
573
  if (!manifest)
@@ -576,6 +591,13 @@ var init_islandPageContext = __esm(() => {
576
591
  init_logger();
577
592
  MANIFEST_BUILD_DIR_KEY = Symbol.for("absolutejs.islandManifestBuildDir");
578
593
  WINDOWS_ABSOLUTE_PATH = /^[A-Za-z]:[\\/]|^\\\\/;
594
+ ISLAND_MARKER_TAG = /<[^>]*\bdata-island="true"[^>]*>/g;
595
+ ISLAND_FRAMEWORKS = [
596
+ "react",
597
+ "svelte",
598
+ "vue",
599
+ "angular"
600
+ ];
579
601
  });
580
602
 
581
603
  // src/core/routeAssets.ts
@@ -918,6 +940,12 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
918
940
  logConventionRenderError(framework, "error", renderError);
919
941
  }
920
942
  return null;
943
+ }, isPageRequest = (request) => {
944
+ if (request.headers.get("hx-request") === "true")
945
+ return true;
946
+ if (request.headers.get("sec-fetch-dest") === "document")
947
+ return true;
948
+ return (request.headers.get("accept") ?? "").includes("text/html");
921
949
  }, renderConventionError = async (framework, pageName, error) => {
922
950
  const errorProps = buildErrorProps(error);
923
951
  const frameworkResponse = await tryFrameworkErrorConvention(framework, pageName, errorProps, error);
@@ -929,12 +957,6 @@ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boo
929
957
  return htmlResponse;
930
958
  }
931
959
  return null;
932
- }, isPageRequest = (request) => {
933
- if (request.headers.get("hx-request") === "true")
934
- return true;
935
- if (request.headers.get("sec-fetch-dest") === "document")
936
- return true;
937
- return (request.headers.get("accept") ?? "").includes("text/html");
938
960
  }, renderStaticRouteError = async (request, error) => {
939
961
  if (!isPageRequest(request))
940
962
  return null;
@@ -3408,9 +3430,9 @@ var createVueCompiler = async () => {
3408
3430
  // src/core/vueServerModule.ts
3409
3431
  import { readFileSync as readFileSync4, realpathSync } from "fs";
3410
3432
  import { mkdir as mkdir3 } from "fs/promises";
3411
- import { dirname as dirname4, join as join7, relative as relative4, resolve as resolve5 } from "path";
3433
+ import { basename as basename4, dirname as dirname4, join as join7, relative as relative4, resolve as resolve5 } from "path";
3412
3434
  var {Transpiler } = globalThis.Bun;
3413
- var ISLAND_COMPONENT_ID_LENGTH = 8, serverCacheRoot3, compiledModuleCache3, syncIslandGeneration2, transpiler2, ensureRelativeImportPath2 = (from, target) => {
3435
+ var serverCacheRoot3, compiledModuleCache3, syncIslandGeneration2, transpiler2, ensureRelativeImportPath2 = (from, target) => {
3414
3436
  const importPath = relative4(dirname4(from), target).replace(/\\/g, "/");
3415
3437
  return importPath.startsWith(".") ? importPath : `./${importPath}`;
3416
3438
  }, getCachedModulePath3 = (sourcePath) => {
@@ -3452,7 +3474,7 @@ var ISLAND_COMPONENT_ID_LENGTH = 8, serverCacheRoot3, compiledModuleCache3, sync
3452
3474
  const compiler = await loadVueCompiler();
3453
3475
  const source = await Bun.file(sourcePath).text();
3454
3476
  const { descriptor } = compiler.parse(source, { filename: sourcePath });
3455
- const componentId = Bun.hash(sourcePath).toString(BASE_36_RADIX).slice(0, ISLAND_COMPONENT_ID_LENGTH);
3477
+ const componentId = toKebab(basename4(sourcePath, ".vue"));
3456
3478
  const hasScript = descriptor.script || descriptor.scriptSetup;
3457
3479
  const compiledScript = hasScript ? compiler.compileScript(descriptor, {
3458
3480
  fs: {
@@ -3502,7 +3524,6 @@ var ISLAND_COMPONENT_ID_LENGTH = 8, serverCacheRoot3, compiledModuleCache3, sync
3502
3524
  return compiledModulePath;
3503
3525
  };
3504
3526
  var init_vueServerModule = __esm(() => {
3505
- init_constants();
3506
3527
  init_isFile();
3507
3528
  serverCacheRoot3 = join7(process.cwd(), ".absolutejs", "islands", "vue");
3508
3529
  compiledModuleCache3 = new Map;
@@ -5599,7 +5620,7 @@ __export(exports_compileAngular, {
5599
5620
  invalidateAngularJitCache: () => invalidateAngularJitCache
5600
5621
  });
5601
5622
  import { existsSync as existsSync5, readFileSync as readFileSync6, promises as fs } from "fs";
5602
- import { join as join9, basename as basename4, sep, dirname as dirname5, resolve as resolve6, relative as relative5 } from "path";
5623
+ import { join as join9, basename as basename5, sep, dirname as dirname5, resolve as resolve6, relative as relative5 } from "path";
5603
5624
  var {Glob } = globalThis.Bun;
5604
5625
  var atomicWriteSequence = 0, writeTextFileAtomically = async (path, content) => {
5605
5626
  const temporaryPath = `${path}.tmp.${process.pid}.${atomicWriteSequence++}`;
@@ -5981,7 +6002,7 @@ var atomicWriteSequence = 0, writeTextFileAtomically = async (path, content) =>
5981
6002
  const originalGetDefaultLibFileName = host.getDefaultLibFileName;
5982
6003
  host.getDefaultLibFileName = (opts) => {
5983
6004
  const fileName = originalGetDefaultLibFileName ? originalGetDefaultLibFileName(opts) : "lib.d.ts";
5984
- return basename4(fileName);
6005
+ return basename5(fileName);
5985
6006
  };
5986
6007
  const originalGetSourceFile = host.getSourceFile;
5987
6008
  host.getSourceFile = (fileName, languageVersion, onError) => {
@@ -6422,7 +6443,7 @@ ${fields}
6422
6443
  };
6423
6444
  const toOutputPath = (sourcePath) => {
6424
6445
  const inputDir = dirname5(sourcePath);
6425
- const fileBase = basename4(sourcePath).replace(/\.[cm]?[tj]sx?$/, ".js");
6446
+ const fileBase = basename5(sourcePath).replace(/\.[cm]?[tj]sx?$/, ".js");
6426
6447
  if (inputDir === outDir || inputDir.startsWith(`${outDir}${sep}`)) {
6427
6448
  return join9(inputDir, fileBase);
6428
6449
  }
@@ -6478,7 +6499,7 @@ ${fields}
6478
6499
  const inputDir = dirname5(resolved);
6479
6500
  const relativeDir = inputDir.startsWith(baseDir) ? inputDir.substring(baseDir.length + 1) : inputDir;
6480
6501
  const targetDir = join9(outDir, relativeDir);
6481
- const targetPath = join9(targetDir, basename4(resolved));
6502
+ const targetPath = join9(targetDir, basename5(resolved));
6482
6503
  await fs.mkdir(targetDir, { recursive: true });
6483
6504
  await fs.copyFile(resolved, targetPath);
6484
6505
  allOutputs.push(targetPath);
@@ -6493,7 +6514,7 @@ ${fields}
6493
6514
  const inlined = await inlineResources(sourceCode, dirname5(actualPath), stylePreprocessors);
6494
6515
  sourceCode = inlineTemplateAndLowerDeferSync(inlined.source, dirname5(actualPath)).source;
6495
6516
  const inputDir = dirname5(actualPath);
6496
- const fileBase = basename4(actualPath).replace(/\.[cm]?[tj]sx?$/, ".js");
6517
+ const fileBase = basename5(actualPath).replace(/\.[cm]?[tj]sx?$/, ".js");
6497
6518
  const targetPath = toOutputPath(actualPath);
6498
6519
  const targetDir = dirname5(targetPath);
6499
6520
  const relativeDir = relative5(outDir, targetDir).replace(/\\/g, "/");
@@ -6622,7 +6643,7 @@ export const __ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__ = true;
6622
6643
  let outputs = hmr ? await traceAngularPhase("jit/compile-entry", compileEntry, {
6623
6644
  entry: resolvedEntry
6624
6645
  }) : aotOutputs;
6625
- const fileBase = basename4(resolvedEntry).replace(/\.[tj]s$/, "");
6646
+ const fileBase = basename5(resolvedEntry).replace(/\.[tj]s$/, "");
6626
6647
  const jsName = `${fileBase}.js`;
6627
6648
  const compiledFallbackPaths = [
6628
6649
  join9(compiledRoot, relativeEntry),
@@ -16016,6 +16037,18 @@ var provideDeterministicEnv = (options = {}) => {
16016
16037
  }
16017
16038
  ];
16018
16039
  };
16040
+ // src/utils/requestRenderUrl.ts
16041
+ var requestRenderUrl = (request) => {
16042
+ if (!request)
16043
+ return;
16044
+ try {
16045
+ const parsed = new URL(request.url);
16046
+ return `${parsed.pathname.replace(/\/{2,}/g, "/")}${parsed.search}`;
16047
+ } catch {
16048
+ return;
16049
+ }
16050
+ };
16051
+
16019
16052
  // src/angular/pageHandler.ts
16020
16053
  init_constants();
16021
16054
  init_islandPageContext();
@@ -16027,7 +16060,7 @@ init_registerClientScript();
16027
16060
  init_angularDeps();
16028
16061
  import { AsyncLocalStorage as AsyncLocalStorage5 } from "async_hooks";
16029
16062
  import { lstat, mkdir as mkdir4, readlink, symlink } from "fs/promises";
16030
- import { basename as basename5, dirname as dirname6, join as join10, resolve as resolve7 } from "path";
16063
+ import { basename as basename6, dirname as dirname6, join as join10, resolve as resolve7 } from "path";
16031
16064
 
16032
16065
  // src/angular/animationProviders.ts
16033
16066
  init_resolveAngularPackage();
@@ -16669,7 +16702,7 @@ var resolveRuntimeAngularModulePath = async (pagePath) => {
16669
16702
  await Promise.resolve().then(() => init_compileAngular());
16670
16703
  const cacheBuster = createAngularRuntimeCacheBuster();
16671
16704
  const outputs = await compileAngularFileJIT(pagePath, outDir, process.cwd(), undefined, cacheBuster);
16672
- const expectedFileName = basename5(pagePath).replace(/\.ts$/, ".js");
16705
+ const expectedFileName = basename6(pagePath).replace(/\.ts$/, ".js");
16673
16706
  const runtimePagePath = outputs.find((output) => output.endsWith(`/${expectedFileName}`)) ?? outputs.find((output) => output.endsWith(`\\${expectedFileName}`)) ?? outputs[0] ?? pagePath;
16674
16707
  return {
16675
16708
  cacheBuster,
@@ -16689,16 +16722,7 @@ var withHtmlContentType = (responseInit = {}) => {
16689
16722
  }
16690
16723
  return { ...responseInit, headers };
16691
16724
  };
16692
- var resolveRequestRenderUrl = (request) => {
16693
- if (!request)
16694
- return "/";
16695
- try {
16696
- const parsed = new URL(request.url);
16697
- return `${parsed.pathname}${parsed.search}`;
16698
- } catch {
16699
- return "/";
16700
- }
16701
- };
16725
+ var resolveRequestRenderUrl = (request) => requestRenderUrl(request) ?? "/";
16702
16726
  var angularSsrContext = new AsyncLocalStorage5;
16703
16727
  setSsrContextGetter(() => angularSsrContext.getStore());
16704
16728
  var handleAngularPageRequest = async (input) => {
@@ -17347,5 +17371,5 @@ export {
17347
17371
  withPendingTask
17348
17372
  };
17349
17373
 
17350
- //# debugId=F46FD0E47DF0EDC864756E2164756E21
17374
+ //# debugId=165DD646F249EF6564756E2164756E21
17351
17375
  //# sourceMappingURL=index.js.map