@absolutejs/absolute 0.19.0-beta.762 → 0.19.0-beta.764

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.
package/dist/build.js CHANGED
@@ -43739,9 +43739,76 @@ ${registrations}
43739
43739
  if (typeof hostSource === "string")
43740
43740
  return hostSource;
43741
43741
  return fs2.readFile(fileName, "utf-8");
43742
+ }, safeStableStringify = (value2) => {
43743
+ const seen = new WeakSet;
43744
+ return JSON.stringify(value2, (_key, entry) => {
43745
+ if (typeof entry === "function")
43746
+ return `[Function:${entry.name}]`;
43747
+ if (!entry || typeof entry !== "object")
43748
+ return entry;
43749
+ if (seen.has(entry))
43750
+ return "[Circular]";
43751
+ seen.add(entry);
43752
+ if (Array.isArray(entry))
43753
+ return entry;
43754
+ return Object.fromEntries(Object.entries(entry).sort(([left], [right]) => left.localeCompare(right)));
43755
+ });
43756
+ }, collectAngularResourcePaths = (source, fileDir) => {
43757
+ const paths = [];
43758
+ const templateUrlMatch = findUncommentedMatch(source, /templateUrl\s*:\s*['"]([^'"]+)['"]/);
43759
+ if (templateUrlMatch?.[1])
43760
+ paths.push(join15(fileDir, templateUrlMatch[1]));
43761
+ const styleUrlMatch = findUncommentedMatch(source, /styleUrl\s*:\s*['"]([^'"]+)['"]/);
43762
+ if (styleUrlMatch?.[1])
43763
+ paths.push(join15(fileDir, styleUrlMatch[1]));
43764
+ const styleUrlsMatch = findUncommentedMatch(source, /styleUrls\s*:\s*\[([^\]]+)\]/);
43765
+ const urlMatches = styleUrlsMatch?.[1]?.match(/['"]([^'"]+)['"]/g);
43766
+ if (urlMatches) {
43767
+ for (const urlMatch of urlMatches) {
43768
+ paths.push(join15(fileDir, urlMatch.replace(/['"]/g, "")));
43769
+ }
43770
+ }
43771
+ return paths.map((path2) => resolve16(path2));
43772
+ }, readResourceCacheFile = async (cachePath) => {
43773
+ try {
43774
+ const entry = JSON.parse(await fs2.readFile(cachePath, "utf-8"));
43775
+ if (entry.version !== 1 || typeof entry.source !== "string") {
43776
+ return null;
43777
+ }
43778
+ return entry;
43779
+ } catch {
43780
+ return null;
43781
+ }
43782
+ }, writeResourceCacheFile = async (cachePath, source) => {
43783
+ await fs2.mkdir(dirname10(cachePath), { recursive: true });
43784
+ await fs2.writeFile(cachePath, JSON.stringify({
43785
+ source,
43786
+ version: 1
43787
+ }), "utf-8");
43788
+ }, resolveResourceTransformCachePath = async (filePath, source, stylePreprocessors) => {
43789
+ const resourcePaths = collectAngularResourcePaths(source, dirname10(filePath));
43790
+ const resourceContents = await Promise.all(resourcePaths.map(async (resourcePath) => {
43791
+ const content = await fs2.readFile(resourcePath, "utf-8");
43792
+ return `${resourcePath}\x00${content}`;
43793
+ }));
43794
+ const cacheInput = [
43795
+ "v1",
43796
+ filePath,
43797
+ source,
43798
+ ...resourceContents,
43799
+ safeStableStringify(stylePreprocessors ?? null)
43800
+ ].join("\x00");
43801
+ const cacheKey2 = Bun.hash(cacheInput).toString(BASE_36_RADIX);
43802
+ return join15(process.cwd(), ".absolutejs", "cache", "angular-resources", `${cacheKey2}.json`);
43742
43803
  }, precomputeAotResourceTransforms = async (inputPaths, readFile4, stylePreprocessors) => {
43743
43804
  const transformedSources = new Map;
43744
43805
  const visited = new Set;
43806
+ const stats = {
43807
+ cacheHits: 0,
43808
+ cacheMisses: 0,
43809
+ filesVisited: 0,
43810
+ transformedFiles: 0
43811
+ };
43745
43812
  const transformFile = async (filePath) => {
43746
43813
  const resolvedPath = resolve16(filePath);
43747
43814
  if (visited.has(resolvedPath))
@@ -43749,9 +43816,24 @@ ${registrations}
43749
43816
  visited.add(resolvedPath);
43750
43817
  if (!existsSync16(resolvedPath) || resolvedPath.endsWith(".d.ts"))
43751
43818
  return;
43819
+ stats.filesVisited += 1;
43752
43820
  const source = await readFileForAotTransform(resolvedPath, readFile4);
43753
- const transformed = await inlineResources(source, dirname10(resolvedPath), stylePreprocessors);
43754
- transformedSources.set(resolvedPath, transformed.source);
43821
+ const cachePath = await resolveResourceTransformCachePath(resolvedPath, source, stylePreprocessors);
43822
+ const cached = await readResourceCacheFile(cachePath);
43823
+ let transformedSource;
43824
+ if (cached) {
43825
+ stats.cacheHits += 1;
43826
+ transformedSource = cached.source;
43827
+ } else {
43828
+ stats.cacheMisses += 1;
43829
+ const transformed = await inlineResources(source, dirname10(resolvedPath), stylePreprocessors);
43830
+ transformedSource = transformed.source;
43831
+ await writeResourceCacheFile(cachePath, transformedSource);
43832
+ }
43833
+ if (transformedSource !== source) {
43834
+ stats.transformedFiles += 1;
43835
+ transformedSources.set(resolvedPath, transformedSource);
43836
+ }
43755
43837
  const imports = extractLocalImportSpecifiers(source, resolvedPath);
43756
43838
  await Promise.all(imports.map(async (specifier) => {
43757
43839
  const resolvedImport = resolveLocalTsImport(resolvedPath, specifier);
@@ -43760,7 +43842,7 @@ ${registrations}
43760
43842
  }));
43761
43843
  };
43762
43844
  await Promise.all(inputPaths.map((inputPath) => transformFile(inputPath)));
43763
- return transformedSources;
43845
+ return { stats, transformedSources };
43764
43846
  }, compileAngularFiles = async (inputPaths, outDir, stylePreprocessors) => {
43765
43847
  const islandMetadataByOutputPath = await traceAngularPhase("aot/island-metadata", () => new Map(inputPaths.map((inputPath) => {
43766
43848
  const outputPath = resolve16(join15(outDir, relative9(process.cwd(), resolve16(inputPath)).replace(/\.[cm]?[tj]sx?$/, ".js")));
@@ -43821,7 +43903,15 @@ ${registrations}
43821
43903
  emitted[relativePath] = text;
43822
43904
  };
43823
43905
  const originalReadFile = host.readFile;
43824
- const aotTransformedSources = await traceAngularPhase("aot/precompute-resources", () => precomputeAotResourceTransforms(inputPaths, originalReadFile?.bind(host), stylePreprocessors), { entries: inputPaths.length });
43906
+ const { stats: aotResourceTransformStats, transformedSources } = await traceAngularPhase("aot/precompute-resources", () => precomputeAotResourceTransforms(inputPaths, originalReadFile?.bind(host), stylePreprocessors), { entries: inputPaths.length });
43907
+ await traceAngularPhase("aot/resource-cache-summary", () => {
43908
+ return;
43909
+ }, {
43910
+ cacheHits: aotResourceTransformStats.cacheHits,
43911
+ cacheMisses: aotResourceTransformStats.cacheMisses,
43912
+ filesVisited: aotResourceTransformStats.filesVisited,
43913
+ transformedFiles: aotResourceTransformStats.transformedFiles
43914
+ });
43825
43915
  host.readFile = (fileName) => {
43826
43916
  const source = originalReadFile ? originalReadFile.call(host, fileName) : undefined;
43827
43917
  if (typeof source !== "string")
@@ -43830,12 +43920,12 @@ ${registrations}
43830
43920
  return source;
43831
43921
  }
43832
43922
  const resolvedPath = resolve16(fileName);
43833
- return aotTransformedSources.get(resolvedPath) ?? source;
43923
+ return transformedSources.get(resolvedPath) ?? source;
43834
43924
  };
43835
43925
  const originalGetSourceFileForCompile = host.getSourceFile;
43836
43926
  host.getSourceFile = (fileName, languageVersion, onError2) => {
43837
- const source = host.readFile(fileName);
43838
- if (typeof source === "string") {
43927
+ const source = transformedSources.get(resolve16(fileName));
43928
+ if (source) {
43839
43929
  return ts2.createSourceFile(fileName, source, languageVersion, true);
43840
43930
  }
43841
43931
  return originalGetSourceFileForCompile?.call(host, fileName, languageVersion, onError2);
@@ -50213,5 +50303,5 @@ export {
50213
50303
  build
50214
50304
  };
50215
50305
 
50216
- //# debugId=361E23C79CF9F13864756E2164756E21
50306
+ //# debugId=F3728BAC03FD13D664756E2164756E21
50217
50307
  //# sourceMappingURL=build.js.map