This is an automated email from the ASF dual-hosted git repository. thiagohp pushed a commit to branch feature/es-module-support in repository https://gitbox.apache.org/repos/asf/tapestry-5.git
commit 37dcd99502d11cc41189bc5ddd7caa6fc6ffc6e9 Author: Thiago H. de Paula Figueiredo <thi...@arsmachina.com.br> AuthorDate: Tue Apr 1 18:37:29 2025 -0300 TAP5-2803: fixing live reloading of files in /META-INF/es-assets --- .../services/assets/ResourceChangeTrackerImpl.java | 3 +-- .../services/javascript/EsModuleManagerImpl.java | 16 ++++++++++------ .../ioc/internal/util/URLChangeTracker.java | 21 +++++++++++++++++++++ 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ResourceChangeTrackerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ResourceChangeTrackerImpl.java index 73d4d2644..54e3bc485 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ResourceChangeTrackerImpl.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ResourceChangeTrackerImpl.java @@ -92,12 +92,11 @@ public class ResourceChangeTrackerImpl extends InvalidationEventHubImpl implemen public void forceInvalidationEvent() { - fireInvalidationEvent(); - if (tracker != null) { tracker.clear(); } + fireInvalidationEvent(); } public void checkForUpdates() diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java index dff737ee6..236f72382 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java @@ -17,6 +17,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.tapestry5.Asset; import org.apache.tapestry5.SymbolConstants; import org.apache.tapestry5.commons.util.AvailableValues; import org.apache.tapestry5.commons.util.CollectionFactory; @@ -62,6 +63,8 @@ public class EsModuleManagerImpl implements EsModuleManager private JSONObject importMap; + private final ResourceChangeTracker resourceChangeTracker; + private final List<EsModuleConfigurationCallback> globalCallbacks; public EsModuleManagerImpl( @@ -72,13 +75,15 @@ public class EsModuleManagerImpl implements EsModuleManager boolean compactJSON, @Symbol(TapestryHttpSymbolConstants.PRODUCTION_MODE) boolean productionMode, - ClasspathScanner classpathScanner) + ClasspathScanner classpathScanner, + ResourceChangeTracker resourceChangeTracker) { this.compactJSON = compactJSON; this.assetSource = assetSource; this.classpathScanner = classpathScanner; this.globalCallbacks = globalCallbacks; this.productionMode = productionMode; + this.resourceChangeTracker = resourceChangeTracker; importMap = new JSONObject(); extensions = CollectionFactory.newSet("js"); @@ -94,6 +99,7 @@ public class EsModuleManagerImpl implements EsModuleManager JSONObject importMap = new JSONObject(); JSONObject imports = importMap.in(IMPORTS_ATTRIBUTE); + resourceChangeTracker.addInvalidationCallback(this::createImportMap); cache.clear(); loadBaseModuleList(imports); @@ -124,7 +130,9 @@ public class EsModuleManagerImpl implements EsModuleManager String id = file.replace(CLASSPATH_ROOT, ""); id = id.substring(0, id.lastIndexOf('.')); - imports.put(id, assetSource.getClasspathAsset(file).toClientURL()); + final Asset asset = assetSource.getClasspathAsset(file); + resourceChangeTracker.trackResource(asset.getResource()); + imports.put(id, asset.toClientURL()); } } catch (IOException e) { @@ -136,10 +144,6 @@ public class EsModuleManagerImpl implements EsModuleManager public void setupInvalidation(ResourceChangeTracker tracker) { -// Live class reloading of ES modules (failing at the moment) - - // TODO make invalidations smarter (and work) - tracker.addInvalidationCallback(this::createImportMap); } @Override diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java index 4baafe32c..af365db75 100644 --- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java +++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/URLChangeTracker.java @@ -18,7 +18,10 @@ import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -314,6 +317,24 @@ public class URLChangeTracker<T> return fileToTimestamp.size(); } + public String toString() + { + StringBuilder builder = new StringBuilder(); + + final List<File> files = new ArrayList<>(fileToTimestamp.keySet()); + Collections.sort(files, (f1, f2) -> f1.getName().compareTo(f2.getName())); + + for (File file : files) + { + builder.append(file.getName()); + builder.append(": "); + builder.append(fileToTimestamp.get(file)); + builder.append("\n"); + } + + return builder.toString(); + } + private final class TrackingInfo {