@absolutejs/absolute 0.19.0-beta.761 → 0.19.0-beta.763

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.
@@ -3230,7 +3230,10 @@ __export(exports_compileAngular, {
3230
3230
  import { existsSync as existsSync5, readFileSync as readFileSync4, promises as fs } from "fs";
3231
3231
  import { join as join5, basename as basename3, sep, dirname as dirname4, resolve as resolve6, relative as relative3 } from "path";
3232
3232
  import ts from "typescript";
3233
- var readTsconfigPathAliases = () => {
3233
+ var traceAngularPhase = async (name, fn, metadata) => {
3234
+ const tracePhase = globalThis.__absoluteBuildTracePhase;
3235
+ return tracePhase ? tracePhase(`compile/angular/${name}`, fn, metadata) : await fn();
3236
+ }, readTsconfigPathAliases = () => {
3234
3237
  try {
3235
3238
  const configPath = resolve6(process.cwd(), "tsconfig.json");
3236
3239
  const config = ts.readConfigFile(configPath, ts.sys.readFile).config;
@@ -3469,7 +3472,9 @@ ${registrations}
3469
3472
  return;
3470
3473
  const source = await readFileForAotTransform(resolvedPath, readFile2);
3471
3474
  const transformed = await inlineResources(source, dirname4(resolvedPath), stylePreprocessors);
3472
- transformedSources.set(resolvedPath, transformed.source);
3475
+ if (transformed.source !== source) {
3476
+ transformedSources.set(resolvedPath, transformed.source);
3477
+ }
3473
3478
  const imports = extractLocalImportSpecifiers(source, resolvedPath);
3474
3479
  await Promise.all(imports.map(async (specifier) => {
3475
3480
  const resolvedImport = resolveLocalTsImport(resolvedPath, specifier);
@@ -3480,18 +3485,20 @@ ${registrations}
3480
3485
  await Promise.all(inputPaths.map((inputPath) => transformFile(inputPath)));
3481
3486
  return transformedSources;
3482
3487
  }, compileAngularFiles = async (inputPaths, outDir, stylePreprocessors) => {
3483
- const islandMetadataByOutputPath = new Map(inputPaths.map((inputPath) => {
3488
+ const islandMetadataByOutputPath = await traceAngularPhase("aot/island-metadata", () => new Map(inputPaths.map((inputPath) => {
3484
3489
  const outputPath = resolve6(join5(outDir, relative3(process.cwd(), resolve6(inputPath)).replace(/\.[cm]?[tj]sx?$/, ".js")));
3485
3490
  return [
3486
3491
  outputPath,
3487
3492
  buildIslandMetadataExports(readFileSync4(inputPath, "utf-8"))
3488
3493
  ];
3489
- }));
3490
- const { readConfiguration, performCompilation, EmitFlags } = await import("@angular/compiler-cli");
3491
- const tsPath = __require.resolve("typescript");
3492
- const tsRootDir = dirname4(tsPath);
3493
- const tsLibDir = tsRootDir.endsWith("lib") ? tsRootDir : resolve6(tsRootDir, "lib");
3494
- const config = readConfiguration("./tsconfig.json");
3494
+ })), { entries: inputPaths.length });
3495
+ const { readConfiguration, performCompilation, EmitFlags } = await traceAngularPhase("aot/import-compiler-cli", () => import("@angular/compiler-cli"));
3496
+ const tsLibDir = await traceAngularPhase("aot/resolve-typescript-lib", () => {
3497
+ const tsPath = __require.resolve("typescript");
3498
+ const tsRootDir = dirname4(tsPath);
3499
+ return tsRootDir.endsWith("lib") ? tsRootDir : resolve6(tsRootDir, "lib");
3500
+ });
3501
+ const config = await traceAngularPhase("aot/read-configuration", () => readConfiguration("./tsconfig.json"));
3495
3502
  const options = {
3496
3503
  emitDecoratorMetadata: true,
3497
3504
  esModuleInterop: true,
@@ -3514,7 +3521,7 @@ ${registrations}
3514
3521
  options.incremental = false;
3515
3522
  options.tsBuildInfoFile = undefined;
3516
3523
  options.rootDir = process.cwd();
3517
- const host = ts.createCompilerHost(options);
3524
+ const host = await traceAngularPhase("aot/create-compiler-host", () => ts.createCompilerHost(options));
3518
3525
  const originalGetDefaultLibLocation = host.getDefaultLibLocation;
3519
3526
  host.getDefaultLibLocation = () => tsLibDir || (originalGetDefaultLibLocation ? originalGetDefaultLibLocation() : "");
3520
3527
  const originalGetDefaultLibFileName = host.getDefaultLibFileName;
@@ -3537,7 +3544,7 @@ ${registrations}
3537
3544
  emitted[relativePath] = text;
3538
3545
  };
3539
3546
  const originalReadFile = host.readFile;
3540
- const aotTransformedSources = await precomputeAotResourceTransforms(inputPaths, originalReadFile?.bind(host), stylePreprocessors);
3547
+ const aotTransformedSources = await traceAngularPhase("aot/precompute-resources", () => precomputeAotResourceTransforms(inputPaths, originalReadFile?.bind(host), stylePreprocessors), { entries: inputPaths.length });
3541
3548
  host.readFile = (fileName) => {
3542
3549
  const source = originalReadFile ? originalReadFile.call(host, fileName) : undefined;
3543
3550
  if (typeof source !== "string")
@@ -3550,50 +3557,54 @@ ${registrations}
3550
3557
  };
3551
3558
  const originalGetSourceFileForCompile = host.getSourceFile;
3552
3559
  host.getSourceFile = (fileName, languageVersion, onError) => {
3553
- const source = host.readFile(fileName);
3554
- if (typeof source === "string") {
3560
+ const source = aotTransformedSources.get(resolve6(fileName));
3561
+ if (source) {
3555
3562
  return ts.createSourceFile(fileName, source, languageVersion, true);
3556
3563
  }
3557
3564
  return originalGetSourceFileForCompile?.call(host, fileName, languageVersion, onError);
3558
3565
  };
3559
3566
  let diagnostics;
3560
3567
  try {
3561
- ({ diagnostics } = performCompilation({
3568
+ ({ diagnostics } = await traceAngularPhase("aot/perform-compilation", () => performCompilation({
3562
3569
  emitFlags: EmitFlags.Default,
3563
3570
  host,
3564
3571
  options,
3565
3572
  rootNames: inputPaths
3566
- }));
3573
+ }), { entries: inputPaths.length }));
3567
3574
  } finally {
3568
3575
  host.readFile = originalReadFile;
3569
3576
  host.getSourceFile = originalGetSourceFileForCompile;
3570
3577
  }
3571
- throwOnCompilationErrors(diagnostics);
3572
- const rawEntries = Object.entries(emitted).filter(([fileName]) => fileName.endsWith(".js")).map(([fileName, content]) => ({
3573
- content,
3574
- target: join5(outDir, fileName)
3575
- }));
3576
- const outputFiles = new Set(rawEntries.map(({ target }) => resolve6(target)));
3577
- const entries = rawEntries.map(({ content, target }) => {
3578
- let processedContent = content.replace(/from\s+(['"])(\.\.?\/[^'"]+)(\1)/g, (match, quote, path) => {
3579
- const rewritten = rewriteRelativeJsSpecifier(target, path, outputFiles);
3580
- if (rewritten !== path) {
3581
- return `from ${quote}${rewritten}${quote}`;
3582
- }
3583
- return match;
3584
- });
3585
- processedContent = processedContent.replace(/\u0275\u0275domElementStart/g, "\u0275\u0275elementStart").replace(/\u0275\u0275domElementEnd/g, "\u0275\u0275elementEnd").replace(/\u0275\u0275domElement\(/g, "\u0275\u0275element(").replace(/\u0275\u0275domProperty/g, "\u0275\u0275property").replace(/\u0275\u0275domListener/g, "\u0275\u0275listener");
3586
- processedContent = processedContent.replace(/import\s*{\s*([^}]*)\bInjectFlags\b([^}]*)\s*}\s*from\s*['"]@angular\/core['"]/g, (match, before, after) => {
3587
- const cleaned = (before + after).replace(/,\s*,/g, ",").replace(/^\s*,\s*/, "").replace(/,\s*$/, "");
3588
- return cleaned ? `import { ${cleaned}, InternalInjectFlags } from '@angular/core'` : `import { InternalInjectFlags } from '@angular/core'`;
3578
+ await traceAngularPhase("aot/check-diagnostics", () => throwOnCompilationErrors(diagnostics));
3579
+ const entries = await traceAngularPhase("aot/postprocess-emitted-js", () => {
3580
+ const rawEntries = Object.entries(emitted).filter(([fileName]) => fileName.endsWith(".js")).map(([fileName, content]) => ({
3581
+ content,
3582
+ target: join5(outDir, fileName)
3583
+ }));
3584
+ const outputFiles = new Set(rawEntries.map(({ target }) => resolve6(target)));
3585
+ return rawEntries.map(({ content, target }) => {
3586
+ let processedContent = content.replace(/from\s+(['"])(\.\.?\/[^'"]+)(\1)/g, (match, quote, path) => {
3587
+ const rewritten = rewriteRelativeJsSpecifier(target, path, outputFiles);
3588
+ if (rewritten !== path) {
3589
+ return `from ${quote}${rewritten}${quote}`;
3590
+ }
3591
+ return match;
3592
+ });
3593
+ processedContent = processedContent.replace(/\u0275\u0275domElementStart/g, "\u0275\u0275elementStart").replace(/\u0275\u0275domElementEnd/g, "\u0275\u0275elementEnd").replace(/\u0275\u0275domElement\(/g, "\u0275\u0275element(").replace(/\u0275\u0275domProperty/g, "\u0275\u0275property").replace(/\u0275\u0275domListener/g, "\u0275\u0275listener");
3594
+ processedContent = processedContent.replace(/import\s*{\s*([^}]*)\bInjectFlags\b([^}]*)\s*}\s*from\s*['"]@angular\/core['"]/g, (match, before, after) => {
3595
+ const cleaned = (before + after).replace(/,\s*,/g, ",").replace(/^\s*,\s*/, "").replace(/,\s*$/, "");
3596
+ return cleaned ? `import { ${cleaned}, InternalInjectFlags } from '@angular/core'` : `import { InternalInjectFlags } from '@angular/core'`;
3597
+ });
3598
+ processedContent = processedContent.replace(/\b(?<!Internal)InjectFlags\b/g, "InternalInjectFlags");
3599
+ processedContent += islandMetadataByOutputPath.get(resolve6(target)) ?? "";
3600
+ return { content: processedContent, target };
3589
3601
  });
3590
- processedContent = processedContent.replace(/\b(?<!Internal)InjectFlags\b/g, "InternalInjectFlags");
3591
- processedContent += islandMetadataByOutputPath.get(resolve6(target)) ?? "";
3592
- return { content: processedContent, target };
3593
3602
  });
3594
- await Promise.all(entries.map(({ target }) => fs.mkdir(dirname4(target), { recursive: true })));
3595
- await Promise.all(entries.map(({ target, content }) => fs.writeFile(target, content, "utf-8")));
3596
- return entries.map(({ target }) => target);
3603
+ await traceAngularPhase("aot/write-output", () => Promise.all(entries.map(async ({ target, content }) => {
3604
+ await fs.mkdir(dirname4(target), { recursive: true });
3605
+ await fs.writeFile(target, content, "utf-8");
3606
+ })), { outputs: entries.length });
3607
+ return await traceAngularPhase("aot/collect-output-paths", () => entries.map(({ target }) => target), { outputs: entries.length });
3597
3608
  }, compileAngularFile = async (inputPath, outDir, stylePreprocessors) => compileAngularFiles([inputPath], outDir, stylePreprocessors), jitContentCache, wrapperOutputCache, escapeTemplateContent = (content) => content.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\$\{/g, "\\${"), findUncommentedMatch = (source, pattern) => {
3598
3609
  const re = new RegExp(pattern.source, pattern.flags.includes("g") ? pattern.flags : pattern.flags + "g");
3599
3610
  let match;
@@ -3682,31 +3693,31 @@ ${importLine}${source.slice(insertAt)}`;
3682
3693
  }
3683
3694
  return parts.join("");
3684
3695
  }, buildDeferSlotTemplateResolver = () => ` __absoluteDeferTemplateExpressionCache = new Map<string, string>();
3685
- __absoluteDeferResolveTemplateExpression(expression: string) {
3686
- const cached = this.__absoluteDeferTemplateExpressionCache.get(expression);
3687
- if (cached !== undefined) return cached;
3688
-
3689
- const scope = new Proxy(this, {
3690
- get: (_target, property) => {
3691
- const value = (this as Record<PropertyKey, unknown>)[property];
3692
- return typeof value === "function" ? value.bind(this) : value;
3693
- }
3694
- });
3695
- let value = '';
3696
- try {
3697
- const evaluate = new Function(
3698
- 'scope',
3699
- "with (scope) { return (" + expression + "); }"
3700
- );
3701
-
3702
- const resolvedValue = evaluate(scope);
3703
- value = resolvedValue == null ? '' : String(resolvedValue);
3704
- } catch (_error) {
3705
- value = '';
3706
- }
3707
- this.__absoluteDeferTemplateExpressionCache.set(expression, value);
3708
- return value;
3709
- }
3696
+ ` + ` __absoluteDeferResolveTemplateExpression(expression: string) {
3697
+ ` + ` const cached = this.__absoluteDeferTemplateExpressionCache.get(expression);
3698
+ ` + ` if (cached !== undefined) return cached;
3699
+ ` + `
3700
+ ` + ` const scope = new Proxy(this, {
3701
+ ` + ` get: (_target, property) => {
3702
+ ` + ` const value = (this as Record<PropertyKey, unknown>)[property];
3703
+ ` + ` return typeof value === "function" ? value.bind(this) : value;
3704
+ ` + ` }
3705
+ ` + ` });
3706
+ ` + ` let value = '';
3707
+ ` + ` try {
3708
+ ` + ` const evaluate = new Function(
3709
+ ` + ` 'scope',
3710
+ ` + ` "with (scope) { return (" + expression + "); }"
3711
+ ` + ` );
3712
+ ` + `
3713
+ ` + ` const resolvedValue = evaluate(scope);
3714
+ ` + ` value = resolvedValue == null ? '' : String(resolvedValue);
3715
+ ` + ` } catch (_error) {
3716
+ ` + ` value = '';
3717
+ ` + ` }
3718
+ ` + ` this.__absoluteDeferTemplateExpressionCache.set(expression, value);
3719
+ ` + ` return value;
3720
+ ` + ` }
3710
3721
 
3711
3722
  `, buildDeferSlotFields = (slots) => [
3712
3723
  buildDeferSlotTemplateResolver(),
@@ -3720,8 +3731,8 @@ ${slot.resolvedBindings.map((binding) => ` "${binding.key}": this.__absoluteDef
3720
3731
  ` : ` __absoluteDeferData${index} = () => ({});
3721
3732
  `;
3722
3733
  return `${htmlField + dataField} __absoluteDeferResolvePayload${index} = () => new Promise<any>((resolve) => {
3723
- setTimeout(() => resolve({ kind: 'angular-defer', state: 'resolved', html: this.__absoluteDeferHtml${index}(), data: this.__absoluteDeferData${index}() }), ${slot.delayMs});
3724
- });
3734
+ ` + ` setTimeout(() => resolve({ kind: 'angular-defer', state: 'resolved', html: this.__absoluteDeferHtml${index}(), data: this.__absoluteDeferData${index}() }), ${slot.delayMs});
3735
+ ` + ` });
3725
3736
  `;
3726
3737
  })
3727
3738
  ].join(`
@@ -4001,14 +4012,16 @@ export const __ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__ = true;
4001
4012
  }
4002
4013
  const compiledRoot = compiledParent;
4003
4014
  const indexesDir = join5(compiledParent, "indexes");
4004
- await fs.mkdir(indexesDir, { recursive: true });
4005
- const aotOutputs = hmr ? [] : await compileAngularFiles(entryPoints.map((entry) => resolve6(entry)), compiledRoot, stylePreprocessors);
4006
- const usesLegacyAngularAnimations = createLegacyAngularAnimationUsageResolver(outRoot);
4015
+ await traceAngularPhase("setup/create-indexes-dir", () => fs.mkdir(indexesDir, { recursive: true }));
4016
+ const aotOutputs = hmr ? [] : await traceAngularPhase("aot/compile-files", () => compileAngularFiles(entryPoints.map((entry) => resolve6(entry)), compiledRoot, stylePreprocessors), { entries: entryPoints.length });
4017
+ const usesLegacyAngularAnimations = await traceAngularPhase("setup/legacy-animation-resolver", () => createLegacyAngularAnimationUsageResolver(outRoot));
4007
4018
  const compileTasks = entryPoints.map(async (entry) => {
4008
4019
  const resolvedEntry = resolve6(entry);
4009
4020
  const relativeEntry = relative3(outRoot, resolvedEntry).replace(/\.[tj]s$/, ".js");
4010
4021
  const compileEntry = () => compileAngularFileJIT(resolvedEntry, compiledRoot, outRoot, stylePreprocessors);
4011
- let outputs = hmr ? await compileEntry() : aotOutputs;
4022
+ let outputs = hmr ? await traceAngularPhase("jit/compile-entry", compileEntry, {
4023
+ entry: resolvedEntry
4024
+ }) : aotOutputs;
4012
4025
  const fileBase = basename3(resolvedEntry).replace(/\.[tj]s$/, "");
4013
4026
  const jsName = `${fileBase}.js`;
4014
4027
  const compiledFallbackPaths = [
@@ -4030,13 +4043,13 @@ export const __ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__ = true;
4030
4043
  }
4031
4044
  return candidate;
4032
4045
  };
4033
- let rawServerFile = resolveRawServerFile(outputs);
4046
+ let rawServerFile = await traceAngularPhase("wrapper/resolve-server-output", () => resolveRawServerFile(outputs), { entry: resolvedEntry });
4034
4047
  if (!rawServerFile) {
4035
- rawServerFile = resolveRawServerFile([]);
4048
+ rawServerFile = await traceAngularPhase("wrapper/resolve-server-output-fallback", () => resolveRawServerFile([]), { entry: resolvedEntry });
4036
4049
  }
4037
4050
  if (rawServerFile && !existsSync5(rawServerFile)) {
4038
4051
  outputs = hmr ? await compileEntry() : aotOutputs;
4039
- rawServerFile = resolveRawServerFile(outputs);
4052
+ rawServerFile = await traceAngularPhase("wrapper/resolve-server-output-retry", () => resolveRawServerFile(outputs), { entry: resolvedEntry });
4040
4053
  }
4041
4054
  if (!rawServerFile || !existsSync5(rawServerFile)) {
4042
4055
  throw new Error(`Compiled output not found for ${entry}. Looking for: ${jsName}. Available: ${[
@@ -4044,7 +4057,7 @@ export const __ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__ = true;
4044
4057
  ...compiledFallbackPaths
4045
4058
  ].join(", ")}`);
4046
4059
  }
4047
- const original = await fs.readFile(rawServerFile, "utf-8");
4060
+ const original = await traceAngularPhase("wrapper/read-server-output", () => fs.readFile(rawServerFile, "utf-8"), { entry: resolvedEntry });
4048
4061
  const detectExportedComponentClass = (source, fallback) => {
4049
4062
  const defaultMatch = source.match(/export\s+default\s+([A-Za-z_$][\w$]*)\s*;/);
4050
4063
  if (defaultMatch)
@@ -4054,8 +4067,8 @@ export const __ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__ = true;
4054
4067
  return exportClassMatch[1];
4055
4068
  return fallback;
4056
4069
  };
4057
- const componentClassName = detectExportedComponentClass(original, `${toPascal(fileBase)}Component`);
4058
- const usesLegacyAnimations = await usesLegacyAngularAnimations(resolvedEntry);
4070
+ const componentClassName = await traceAngularPhase("wrapper/detect-component-class", () => detectExportedComponentClass(original, `${toPascal(fileBase)}Component`), { entry: resolvedEntry });
4071
+ const usesLegacyAnimations = await traceAngularPhase("wrapper/detect-legacy-animations", () => usesLegacyAngularAnimations(resolvedEntry), { entry: resolvedEntry });
4059
4072
  const serverContentHash = Bun.hash(original).toString(BASE_36_RADIX);
4060
4073
  const cachedWrapper = wrapperOutputCache.get(resolvedEntry);
4061
4074
  const clientFile = join5(indexesDir, jsName);
@@ -4099,7 +4112,7 @@ export const __ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__ = true;
4099
4112
  `);
4100
4113
  await fs.writeFile(ssrDepsFile, ssrDepsContent, "utf-8");
4101
4114
  }
4102
- await fs.writeFile(rawServerFile, rewritten, "utf-8");
4115
+ await traceAngularPhase("wrapper/write-server-output", () => fs.writeFile(rawServerFile, rewritten, "utf-8"), { entry: resolvedEntry });
4103
4116
  const relativePath = relative3(indexesDir, rawServerFile).replace(/\\/g, "/");
4104
4117
  const normalizedImportPath = relativePath.startsWith(".") ? relativePath : `./${relativePath}`;
4105
4118
  const hmrPreamble = hmr ? `window.__HMR_FRAMEWORK__ = "angular";
@@ -4278,7 +4291,7 @@ if (pageHasRawStreamingSlots) {
4278
4291
  `.trim();
4279
4292
  const indexHash = Bun.hash(hydration).toString(BASE_36_RADIX);
4280
4293
  const indexUnchanged = cachedWrapper?.indexHash === indexHash;
4281
- await fs.writeFile(clientFile, hydration, "utf-8");
4294
+ await traceAngularPhase("wrapper/write-client-index", () => fs.writeFile(clientFile, hydration, "utf-8"), { entry: resolvedEntry });
4282
4295
  wrapperOutputCache.set(resolvedEntry, {
4283
4296
  indexHash,
4284
4297
  serverHash: serverContentHash
@@ -4289,9 +4302,11 @@ if (pageHasRawStreamingSlots) {
4289
4302
  serverPath: rawServerFile
4290
4303
  };
4291
4304
  });
4292
- const results = await Promise.all(compileTasks);
4293
- const serverPaths = results.map((r) => r.serverPath);
4294
- const clientPaths = results.map((r) => r.clientPath);
4305
+ const results = await traceAngularPhase("wrapper/process-entries", () => Promise.all(compileTasks), { entries: entryPoints.length });
4306
+ const { clientPaths, serverPaths } = await traceAngularPhase("wrapper/collect-paths", () => ({
4307
+ clientPaths: results.map((r) => r.clientPath),
4308
+ serverPaths: results.map((r) => r.serverPath)
4309
+ }), { entries: results.length });
4295
4310
  return {
4296
4311
  allIndexesUnchanged: hmr && results.every((r) => r.indexUnchanged),
4297
4312
  clientPaths,
@@ -5476,5 +5491,5 @@ export {
5476
5491
  ABSOLUTE_HTTP_TRANSFER_CACHE_SKIP_HEADER
5477
5492
  };
5478
5493
 
5479
- //# debugId=840B9580A1CA20FD64756E2164756E21
5494
+ //# debugId=F5CA23B4C3E68C1364756E2164756E21
5480
5495
  //# sourceMappingURL=server.js.map