com.vaadin.flow.server.frontend.

Class FrontendUtils


  • public class FrontendUtils
    extends Object

    A class for static methods and definitions that might be used in different locations.

    Since:

    2.0

    • Method Detail

      • getOsName

        public static String getOsName()

        Get the Operating System name from the os.name system property.

        Returns:

        operating system name

      • isWindows

        public static boolean isWindows()

        Check if the current os is Windows.

        Returns:

        true if windows

      • getNodeExecutable

        public static String getNodeExecutable(String baseDir)

        Locate node executable.

        Parameters:

        baseDir - project root folder.

        Returns:

        the full path to the executable

      • getNpmExecutable

        public static List<String> getNpmExecutable(String baseDir)

        Locate npm executable.

        Parameters:

        baseDir - project root folder.

        Returns:

        the list of all commands in sequence that need to be executed to have npm running

      • getPnpmExecutable

        public static List<String> getPnpmExecutable(String baseDir)

        Locate pnpm executable.

        In case pnpm is not available it will be installed.

        Parameters:

        baseDir - project root folder.

        Returns:

        the list of all commands in sequence that need to be executed to have pnpm running

        See Also:

        getPnpmExecutable(String, boolean)

      • getPnpmExecutable

        public static List<String> getPnpmExecutable(String baseDir,
                                                     boolean failOnAbsence)

        Locate pnpm executable if it's possible.

        In case the tool is not found either IllegalStateException is thrown or an empty list is returned depending on failOnAbsence value.

        Parameters:

        baseDir - project root folder.

        failOnAbsence - if true throws IllegalStateException if tool is not found, if false return an empty list if tool is not found

        Returns:

        the list of all commands in sequence that need to be executed to have pnpm running

      • getBowerExecutable

        public static List<String> getBowerExecutable(String baseDir)

        Locate bower executable.

        An empty list is returned if bower is not found

        Parameters:

        baseDir - project root folder.

        Returns:

        the list of all commands in sequence that need to be executed to have bower running, an empty list if bower is not found

      • streamToString

        public static String streamToString(InputStream inputStream)

        Read a stream and copy the content in a String.

        Parameters:

        inputStream - the input stream

        Returns:

        the string

      • createProcessBuilder

        public static ProcessBuilder createProcessBuilder(List<String> command)

        Creates a process builder for the given list of program and arguments. If the program is defined as an absolute path, then the directory that contains the program is also appended to PATH so that the it can locate related tools.

        Parameters:

        command - a list with the program and arguments

        Returns:

        a configured process builder

      • getStatsContent

        public static String getStatsContent(VaadinService service)
                                      throws IOException

        Gets the content of the stats.json file produced by webpack.

        Parameters:

        service - the vaadin service.

        Returns:

        the content of the file as a string, null if not found.

        Throws:

        IOException - on error reading stats file.

      • getIndexHtmlContent

        public static String getIndexHtmlContent(VaadinService service)
                                          throws IOException

        Gets the content of the frontend/index.html file which is served by webpack-dev-server in dev-mode and read from classpath in production mode. NOTE: In dev mode, the file content file is fetched via webpack http request. So that we don't need to have a separate index.html's content watcher, auto-reloading will work automatically, like other files managed by webpack in `frontend/` folder.

        Parameters:

        service - the vaadin service

        Returns:

        the content of the index html file as a string, null if not found.

        Throws:

        IOException - on error when reading file

      • getStatsHash

        public static String getStatsHash(VaadinService service)
                                   throws IOException

        Get the latest has for the stats file in development mode. This is requested from the webpack-dev-server.

        In production mode and disabled dev server mode an empty string is returned.

        Parameters:

        service - the Vaadin service.

        Returns:

        hash string for the stats.json file, empty string if none found

        Throws:

        IOException - if an I/O error occurs while creating the input stream.

      • getStatsAssetsByChunkName

        public static String getStatsAssetsByChunkName(VaadinService service)
                                                throws IOException

        Load the asset chunks from stats.json. We will only read the file until we have reached the assetsByChunkName json and return that as a json object string.

        Parameters:

        service - the Vaadin service.

        Returns:

        json for assetsByChunkName object in stats.json or null if stats.json not found or content not found.

        Throws:

        IOException - if an I/O error occurs while creating the input stream.

      • validateNodeAndNpmVersion

        public static void validateNodeAndNpmVersion(String baseDir)

        Validate that the found node and npm versions are new enough. Throws an exception with a descriptive message if a version is too old.

        Parameters:

        baseDir - project root folder.

      • ensurePnpm

        public static void ensurePnpm(String baseDir)

        Ensure that pnpm tool is available and install it if it's not.

        Parameters:

        baseDir - project root folder.

      • isWebpackConfigFile

        public static boolean isWebpackConfigFile(File file)
                                           throws IOException

        Checks whether the file is a webpack configuration file with the expected content (includes a configuration generated by Flow).

        Parameters:

        file - a file to check

        Returns:

        true iff the file exists and includes a generated configuration

        Throws:

        IOException - if an I/O error occurs while reading the file

      • getUnixRelativePath

        public static String getUnixRelativePath(Path source,
                                                 Path target)

        Get relative path from a source path to a target path in Unix form. All the Windows' path separator will be replaced.

        Parameters:

        source - the source path

        target - the target path

        Returns:

        unix relative path from source to target

      • getUnixPath

        public static String getUnixPath(Path source)

        Get path as a String in Unix form.

        Parameters:

        source - path to get

        Returns:

        path as a String in Unix form.

      • readFallbackChunk

        public static FallbackChunk readFallbackChunk(elemental.json.JsonObject object)

        Read fallback chunk data from a json object.

        Parameters:

        object - json object to read fallback chunk data

        Returns:

        a fallback chunk data

      • commandToString

        public static String commandToString(String baseDir,
                                             List<String> command)

        Pretty prints a command line order. It split in lines adapting to 80 columns, and allowing copy and paste in console. It also removes the current directory to avoid security issues in log files.

        Parameters:

        baseDir - the current directory

        command - the command and it's arguments

        Returns:

        the string for printing in logs

      • console

        public static void console(String format,
                                   Object message)

        Intentionally send to console instead to log, useful when executing external processes.

        Parameters:

        format - Format of the line to send to console, it must contain a `%s` outlet for the message

        message - the string to show