├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ ├── build.yml │ ├── publish-plugins.yml │ └── publish-website.yml ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── build.gradle.kts ├── examples ├── application-with-preinstalled-nodejs-distribution │ ├── README.md │ ├── build.gradle.kts │ └── package.json ├── fullstack-war-application │ ├── README.md │ ├── backend │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── example │ │ │ └── springboot │ │ │ ├── Application.java │ │ │ └── HelloController.java │ ├── frontend │ │ ├── build.gradle.kts │ │ ├── config │ │ │ └── config.js │ │ ├── package.json │ │ └── src │ │ │ └── main │ │ │ └── webapp │ │ │ └── index.html │ └── settings.gradle.kts ├── multiple-package-managers-with-shared-nodejs-distribution │ ├── README.md │ ├── build.gradle.kts │ ├── gradle.properties │ ├── gradle │ │ └── libs.versions.toml │ ├── node-subproject │ │ └── build.gradle.kts │ ├── npm-10-subproject │ │ ├── build.gradle.kts │ │ └── package.json │ ├── npm-6-subproject │ │ ├── build.gradle.kts │ │ └── package.json │ ├── pnpm-6-subproject │ │ ├── build.gradle.kts │ │ └── package.json │ ├── pnpm-9-subproject │ │ ├── build.gradle.kts │ │ └── package.json │ ├── settings.gradle.kts │ ├── yarn-1-subproject │ │ ├── build.gradle.kts │ │ └── package.json │ └── yarn-4-subproject │ │ ├── build.gradle.kts │ │ └── package.json ├── npm-application │ ├── README.md │ ├── build.gradle.kts │ └── package.json ├── pnpm-application │ ├── README.md │ ├── build.gradle.kts │ └── package.json ├── yarn-application-with-node-modules-linker │ ├── .yarnrc.yml │ ├── README.md │ ├── build.gradle.kts │ └── package.json └── yarn-application-with-pnp-linker │ ├── README.md │ ├── build.gradle.kts │ └── package.json ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── plugins ├── build.gradle.kts ├── buildSrc │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── siouan │ │ └── frontendgradleplugin │ │ └── GradleTestListener.java ├── frontend-jdk11 │ ├── build.gradle.kts │ ├── gradle.properties │ └── src │ │ ├── integrationTest │ │ ├── java │ │ │ └── org │ │ │ │ └── siouan │ │ │ │ └── frontendgradleplugin │ │ │ │ ├── infrastructure │ │ │ │ └── gradle │ │ │ │ │ ├── AssembleFrontedTaskFuncTest.java │ │ │ │ │ ├── AuthenticationAndProxyFuncTest.java │ │ │ │ │ ├── CheckFrontendTaskFuncTest.java │ │ │ │ │ ├── InstallCorepackTaskFuncTest.java │ │ │ │ │ ├── InstallFrontendTaskFuncTest.java │ │ │ │ │ ├── InstallNodeTaskFuncTest.java │ │ │ │ │ ├── InstallPackageManagerTaskFuncTest.java │ │ │ │ │ ├── MultiProjectsFuncTest.java │ │ │ │ │ ├── PublishFrontendTaskFuncTest.java │ │ │ │ │ ├── ResolvePackageManagerTaskFuncTest.java │ │ │ │ │ ├── RunCorepackTaskFuncTest.java │ │ │ │ │ ├── RunNodeTaskFuncTest.java │ │ │ │ │ ├── RunNpmTaskFuncTest.java │ │ │ │ │ ├── RunPnpmTaskFuncTest.java │ │ │ │ │ ├── RunYarnTaskFuncTest.java │ │ │ │ │ ├── TaskTypesWithDownloadedDistributionsFuncTest.java │ │ │ │ │ └── TaskTypesWithProvidedDistributionsFuncTest.java │ │ │ │ └── test │ │ │ │ ├── FrontendMapBuilder.java │ │ │ │ ├── GradleBuildAssertions.java │ │ │ │ ├── GradleBuildFiles.java │ │ │ │ ├── GradleHelper.java │ │ │ │ ├── GradleSettingsFiles.java │ │ │ │ ├── PluginTaskOutcome.java │ │ │ │ ├── ServerConfigurator.java │ │ │ │ └── TaskTypes.java │ │ └── resources │ │ │ ├── SHASUMS256.txt │ │ │ ├── node-dist-provided │ │ │ ├── bin │ │ │ │ ├── corepack │ │ │ │ ├── node │ │ │ │ ├── npm │ │ │ │ ├── npx │ │ │ │ ├── pnpm │ │ │ │ ├── pnpx │ │ │ │ └── yarn │ │ │ ├── corepack.cmd │ │ │ ├── node.exe │ │ │ ├── npm.cmd │ │ │ ├── npx.cmd │ │ │ ├── pnpm.cmd │ │ │ ├── pnpx.cmd │ │ │ └── yarn.cmd │ │ │ ├── node-dist-without-node │ │ │ ├── bin │ │ │ │ ├── corepack │ │ │ │ ├── npm │ │ │ │ ├── npx │ │ │ │ ├── pnpm │ │ │ │ ├── pnpx │ │ │ │ └── yarn │ │ │ ├── corepack.cmd │ │ │ ├── npm.cmd │ │ │ ├── npx.cmd │ │ │ ├── pnpm.cmd │ │ │ ├── pnpx.cmd │ │ │ └── yarn.cmd │ │ │ ├── node-v22.11.0.zip │ │ │ ├── package-any-manager.json │ │ │ ├── package-invalid-manager.json │ │ │ ├── package-no-manager.json │ │ │ ├── package-npm.json │ │ │ ├── package-pnpm.json │ │ │ └── package-yarn.json │ │ ├── main │ │ └── java │ │ │ └── org │ │ │ └── siouan │ │ │ └── frontendgradleplugin │ │ │ ├── FrontendGradlePlugin.java │ │ │ ├── domain │ │ │ ├── AbstractResolveExecutablePath.java │ │ │ ├── ChannelProvider.java │ │ │ ├── ExecutableType.java │ │ │ ├── ExecutionSettings.java │ │ │ ├── FileManager.java │ │ │ ├── FrontendException.java │ │ │ ├── GetExecutablePath.java │ │ │ ├── GetExecutablePathCommand.java │ │ │ ├── InvalidJsonFileException.java │ │ │ ├── Logger.java │ │ │ ├── MalformedPackageManagerSpecification.java │ │ │ ├── PackageManager.java │ │ │ ├── PackageManagerType.java │ │ │ ├── ParsePackageManagerFromPackageJsonFile.java │ │ │ ├── ParsePackageManagerSpecification.java │ │ │ ├── PathUtils.java │ │ │ ├── Platform.java │ │ │ ├── ResolveCorepackExecutablePath.java │ │ │ ├── ResolveExecutablePathCommand.java │ │ │ ├── ResolveExecutionSettings.java │ │ │ ├── ResolveExecutionSettingsCommand.java │ │ │ ├── ResolveNodeExecutablePath.java │ │ │ ├── ResolveNpmExecutablePath.java │ │ │ ├── ResolvePackageManager.java │ │ │ ├── ResolvePackageManagerCommand.java │ │ │ ├── ResolvePnpmExecutablePath.java │ │ │ ├── ResolveYarnExecutablePath.java │ │ │ ├── StringSplitter.java │ │ │ ├── SystemProperties.java │ │ │ ├── UnsupportedPackageManagerException.java │ │ │ ├── UnsupportedPlatformException.java │ │ │ ├── installer │ │ │ │ ├── AbstractHttpClient.java │ │ │ │ ├── BuildTemporaryFileName.java │ │ │ │ ├── ConvertToHexadecimalString.java │ │ │ │ ├── Credentials.java │ │ │ │ ├── DeployDistribution.java │ │ │ │ ├── DeployDistributionCommand.java │ │ │ │ ├── DownloadResource.java │ │ │ │ ├── DownloadResourceCommand.java │ │ │ │ ├── GetDistribution.java │ │ │ │ ├── GetDistributionCommand.java │ │ │ │ ├── HashFile.java │ │ │ │ ├── HttpClient.java │ │ │ │ ├── HttpClientProvider.java │ │ │ │ ├── HttpResponse.java │ │ │ │ ├── InstallNodeDistribution.java │ │ │ │ ├── InstallNodeDistributionCommand.java │ │ │ │ ├── InvalidDistributionUrlException.java │ │ │ │ ├── InvalidNodeDistributionException.java │ │ │ │ ├── IsNonProxyHost.java │ │ │ │ ├── IsNonProxyHostCommand.java │ │ │ │ ├── NodeDistributionShasumNotFoundException.java │ │ │ │ ├── ProxySettings.java │ │ │ │ ├── ReadNodeDistributionShasum.java │ │ │ │ ├── ReadNodeDistributionShasumCommand.java │ │ │ │ ├── ResolveNodeDistributionArchitectureId.java │ │ │ │ ├── ResolveNodeDistributionType.java │ │ │ │ ├── ResolveNodeDistributionUrl.java │ │ │ │ ├── ResolveNodeDistributionUrlCommand.java │ │ │ │ ├── ResolveProxySettingsByUrl.java │ │ │ │ ├── ResolveProxySettingsByUrlCommand.java │ │ │ │ ├── ResourceDownloadException.java │ │ │ │ ├── RetrySettings.java │ │ │ │ ├── RetryableResourceDownloadException.java │ │ │ │ ├── SelectProxySettings.java │ │ │ │ ├── SelectProxySettingsCommand.java │ │ │ │ ├── UnsupportedDistributionArchiveException.java │ │ │ │ ├── ValidateNodeDistribution.java │ │ │ │ ├── ValidateNodeDistributionCommand.java │ │ │ │ └── archiver │ │ │ │ │ ├── AbstractArchiver.java │ │ │ │ │ ├── ArchiveEntry.java │ │ │ │ │ ├── Archiver.java │ │ │ │ │ ├── ArchiverContext.java │ │ │ │ │ ├── ArchiverException.java │ │ │ │ │ ├── ArchiverProvider.java │ │ │ │ │ ├── DirectoryNotFoundException.java │ │ │ │ │ ├── ExplodeCommand.java │ │ │ │ │ ├── InvalidRelativizedSymbolicLinkTargetException.java │ │ │ │ │ ├── SlipAttackException.java │ │ │ │ │ └── UnsupportedEntryException.java │ │ │ └── package-info.java │ │ │ ├── infrastructure │ │ │ ├── archiver │ │ │ │ ├── ArchiverProviderImpl.java │ │ │ │ ├── TarArchiver.java │ │ │ │ ├── TarArchiverContext.java │ │ │ │ ├── TarEntry.java │ │ │ │ ├── UnexpectedEofException.java │ │ │ │ ├── ZipArchiver.java │ │ │ │ ├── ZipArchiverContext.java │ │ │ │ ├── ZipEntry.java │ │ │ │ └── package-info.java │ │ │ ├── bean │ │ │ │ ├── BeanInstanciationException.java │ │ │ │ ├── BeanRegistry.java │ │ │ │ ├── BeanRegistryException.java │ │ │ │ ├── TooManyCandidateBeansException.java │ │ │ │ ├── ZeroOrMultiplePublicConstructorsException.java │ │ │ │ └── package-info.java │ │ │ ├── gradle │ │ │ │ ├── AbstractRunCommandTask.java │ │ │ │ ├── AssembleTask.java │ │ │ │ ├── BeanRegistryBuildService.java │ │ │ │ ├── CheckTask.java │ │ │ │ ├── ExecSpecAction.java │ │ │ │ ├── FrontendExtension.java │ │ │ │ ├── GradleLoggerAdapter.java │ │ │ │ ├── GradleScriptRunnerAdapter.java │ │ │ │ ├── GradleSettings.java │ │ │ │ ├── InstallCorepackTask.java │ │ │ │ ├── InstallFrontendTask.java │ │ │ │ ├── InstallNodeTask.java │ │ │ │ ├── InstallPackageManagerTask.java │ │ │ │ ├── NonRunnableTaskException.java │ │ │ │ ├── PublishTask.java │ │ │ │ ├── ResolvePackageManagerTask.java │ │ │ │ ├── RunCommandTaskTypes.java │ │ │ │ ├── RunCorepackTask.java │ │ │ │ ├── RunCorepackTaskType.java │ │ │ │ ├── RunNodeTask.java │ │ │ │ ├── RunNodeTaskType.java │ │ │ │ ├── RunNpmTask.java │ │ │ │ ├── RunNpmTaskType.java │ │ │ │ ├── RunPnpmTask.java │ │ │ │ ├── RunPnpmTaskType.java │ │ │ │ ├── RunYarnTask.java │ │ │ │ ├── RunYarnTaskType.java │ │ │ │ ├── ScriptProperties.java │ │ │ │ ├── SystemProviders.java │ │ │ │ ├── TaskLoggerInitializer.java │ │ │ │ └── package-info.java │ │ │ ├── httpclient │ │ │ │ ├── ApacheHttpClient.java │ │ │ │ ├── ApacheHttpResponse.java │ │ │ │ ├── HttpClientProviderImpl.java │ │ │ │ └── LocalFileHttpResponse.java │ │ │ └── system │ │ │ │ ├── ChannelProviderImpl.java │ │ │ │ ├── FileManagerImpl.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── siouan │ │ │ └── frontendgradleplugin │ │ │ ├── FrontendGradlePluginTest.java │ │ │ ├── domain │ │ │ ├── AbstractResolveExecutablePathTest.java │ │ │ ├── GetExecutablePathTest.java │ │ │ ├── PackageManagerFixture.java │ │ │ ├── PackageManagerTypeTest.java │ │ │ ├── ParsePackageManagerFromPackageJsonFileTest.java │ │ │ ├── ParsePackageManagerSpecificationTest.java │ │ │ ├── PathUtilsTest.java │ │ │ ├── PlatformFixture.java │ │ │ ├── PlatformTest.java │ │ │ ├── ResolveCorepackExecutablePathTest.java │ │ │ ├── ResolveExecutionSettingsTest.java │ │ │ ├── ResolveNodeExecutablePathTest.java │ │ │ ├── ResolveNpmExecutablePathTest.java │ │ │ ├── ResolvePackageManagerTest.java │ │ │ ├── ResolvePnpmExecutablePathTest.java │ │ │ ├── ResolveYarnExecutablePathTest.java │ │ │ ├── StringSplitterTest.java │ │ │ ├── SystemPropertiesFixture.java │ │ │ └── installer │ │ │ │ ├── AbstractHttpClientTest.java │ │ │ │ ├── BuildTemporaryFileNameTest.java │ │ │ │ ├── ConvertToHexadecimalStringTest.java │ │ │ │ ├── CredentialsFixture.java │ │ │ │ ├── DeployDistributionTest.java │ │ │ │ ├── DownloadResourceCommandFixture.java │ │ │ │ ├── DownloadResourceTest.java │ │ │ │ ├── GetDistributionTest.java │ │ │ │ ├── HashFileTest.java │ │ │ │ ├── InstallNodeDistributionTest.java │ │ │ │ ├── IsNonProxyHostTest.java │ │ │ │ ├── ProxySettingsFixture.java │ │ │ │ ├── ReadNodeDistributionShasumTest.java │ │ │ │ ├── ResolveNodeDistributionArchitectureIdTest.java │ │ │ │ ├── ResolveNodeDistributionTypeTest.java │ │ │ │ ├── ResolveNodeDistributionUrlTest.java │ │ │ │ ├── ResolveProxySettingsByUrlTest.java │ │ │ │ ├── RetrySettingsFixture.java │ │ │ │ ├── SelectProxySettingsTest.java │ │ │ │ ├── ValidateNodeDistributionTest.java │ │ │ │ └── archiver │ │ │ │ ├── AbstractArchiverTest.java │ │ │ │ ├── ArchiveEntryImpl.java │ │ │ │ ├── ArchiveEntryType.java │ │ │ │ └── ArchiverImpl.java │ │ │ ├── infrastructure │ │ │ ├── archiver │ │ │ │ ├── ArchiverProviderImplTest.java │ │ │ │ ├── TarArchiverContextTest.java │ │ │ │ ├── TarArchiverTest.java │ │ │ │ ├── TarEntryTest.java │ │ │ │ ├── ZipArchiverContextTest.java │ │ │ │ ├── ZipArchiverTest.java │ │ │ │ └── ZipEntryTest.java │ │ │ ├── bean │ │ │ │ └── BeanRegistryTest.java │ │ │ ├── gradle │ │ │ │ ├── ExecSpecActionTest.java │ │ │ │ ├── GradleLoggerAdapterTest.java │ │ │ │ ├── GradleScriptRunnerAdapterTest.java │ │ │ │ ├── SystemProvidersTest.java │ │ │ │ └── TaskLoggerInitializerTest.java │ │ │ └── system │ │ │ │ └── FileManagerImplTest.java │ │ │ └── test │ │ │ ├── PathFixture.java │ │ │ ├── Resources.java │ │ │ └── package-info.java │ │ └── resources │ │ ├── archive-linux.zip │ │ ├── archive-win.zip │ │ ├── archive.tar │ │ ├── archive.tar.gz │ │ └── invalid-archive.unknown ├── frontend-jdk17 │ ├── build.gradle.kts │ ├── gradle.properties │ └── src │ │ ├── integrationTest │ │ ├── java │ │ │ └── org │ │ │ │ └── siouan │ │ │ │ └── frontendgradleplugin │ │ │ │ ├── infrastructure │ │ │ │ └── gradle │ │ │ │ │ ├── AssembleFrontedTaskFuncTest.java │ │ │ │ │ ├── AuthenticationAndProxyFuncTest.java │ │ │ │ │ ├── CheckFrontendTaskFuncTest.java │ │ │ │ │ ├── InstallCorepackTaskFuncTest.java │ │ │ │ │ ├── InstallFrontendTaskFuncTest.java │ │ │ │ │ ├── InstallNodeTaskFuncTest.java │ │ │ │ │ ├── InstallPackageManagerTaskFuncTest.java │ │ │ │ │ ├── MultiProjectsFuncTest.java │ │ │ │ │ ├── PublishFrontendTaskFuncTest.java │ │ │ │ │ ├── ResolvePackageManagerTaskFuncTest.java │ │ │ │ │ ├── RunCorepackTaskFuncTest.java │ │ │ │ │ ├── RunNodeTaskFuncTest.java │ │ │ │ │ ├── RunNpmTaskFuncTest.java │ │ │ │ │ ├── RunPnpmTaskFuncTest.java │ │ │ │ │ ├── RunYarnTaskFuncTest.java │ │ │ │ │ ├── TaskTypesWithDownloadedDistributionsFuncTest.java │ │ │ │ │ └── TaskTypesWithProvidedDistributionsFuncTest.java │ │ │ │ └── test │ │ │ │ ├── FrontendMapBuilder.java │ │ │ │ ├── GradleBuildAssertions.java │ │ │ │ ├── GradleBuildFiles.java │ │ │ │ ├── GradleHelper.java │ │ │ │ ├── GradleSettingsFiles.java │ │ │ │ ├── PluginTaskOutcome.java │ │ │ │ ├── ServerConfigurator.java │ │ │ │ └── TaskTypes.java │ │ └── resources │ │ │ ├── SHASUMS256.txt │ │ │ ├── node-dist-provided │ │ │ ├── bin │ │ │ │ ├── corepack │ │ │ │ ├── node │ │ │ │ ├── npm │ │ │ │ ├── npx │ │ │ │ ├── pnpm │ │ │ │ ├── pnpx │ │ │ │ └── yarn │ │ │ ├── corepack.cmd │ │ │ ├── node.exe │ │ │ ├── npm.cmd │ │ │ ├── npx.cmd │ │ │ ├── pnpm.cmd │ │ │ ├── pnpx.cmd │ │ │ └── yarn.cmd │ │ │ ├── node-dist-without-node │ │ │ ├── bin │ │ │ │ ├── corepack │ │ │ │ ├── npm │ │ │ │ ├── npx │ │ │ │ ├── pnpm │ │ │ │ ├── pnpx │ │ │ │ └── yarn │ │ │ ├── corepack.cmd │ │ │ ├── npm.cmd │ │ │ ├── npx.cmd │ │ │ ├── pnpm.cmd │ │ │ ├── pnpx.cmd │ │ │ └── yarn.cmd │ │ │ ├── node-v22.11.0.zip │ │ │ ├── package-any-manager.json │ │ │ ├── package-invalid-manager.json │ │ │ ├── package-no-manager.json │ │ │ ├── package-npm.json │ │ │ ├── package-pnpm.json │ │ │ └── package-yarn.json │ │ ├── main │ │ └── java │ │ │ └── org │ │ │ └── siouan │ │ │ └── frontendgradleplugin │ │ │ ├── FrontendGradlePlugin.java │ │ │ ├── domain │ │ │ ├── AbstractResolveExecutablePath.java │ │ │ ├── ChannelProvider.java │ │ │ ├── ExecutableType.java │ │ │ ├── ExecutionSettings.java │ │ │ ├── FileManager.java │ │ │ ├── FrontendException.java │ │ │ ├── GetExecutablePath.java │ │ │ ├── GetExecutablePathCommand.java │ │ │ ├── InvalidJsonFileException.java │ │ │ ├── Logger.java │ │ │ ├── MalformedPackageManagerSpecification.java │ │ │ ├── PackageManager.java │ │ │ ├── PackageManagerType.java │ │ │ ├── ParsePackageManagerFromPackageJsonFile.java │ │ │ ├── ParsePackageManagerSpecification.java │ │ │ ├── PathUtils.java │ │ │ ├── Platform.java │ │ │ ├── ResolveCorepackExecutablePath.java │ │ │ ├── ResolveExecutablePathCommand.java │ │ │ ├── ResolveExecutionSettings.java │ │ │ ├── ResolveExecutionSettingsCommand.java │ │ │ ├── ResolveNodeExecutablePath.java │ │ │ ├── ResolveNpmExecutablePath.java │ │ │ ├── ResolvePackageManager.java │ │ │ ├── ResolvePackageManagerCommand.java │ │ │ ├── ResolvePnpmExecutablePath.java │ │ │ ├── ResolveYarnExecutablePath.java │ │ │ ├── StringSplitter.java │ │ │ ├── SystemProperties.java │ │ │ ├── UnsupportedPackageManagerException.java │ │ │ ├── UnsupportedPlatformException.java │ │ │ ├── installer │ │ │ │ ├── AbstractHttpClient.java │ │ │ │ ├── BuildTemporaryFileName.java │ │ │ │ ├── ConvertToHexadecimalString.java │ │ │ │ ├── Credentials.java │ │ │ │ ├── DeployDistribution.java │ │ │ │ ├── DeployDistributionCommand.java │ │ │ │ ├── DownloadResource.java │ │ │ │ ├── DownloadResourceCommand.java │ │ │ │ ├── GetDistribution.java │ │ │ │ ├── GetDistributionCommand.java │ │ │ │ ├── HashFile.java │ │ │ │ ├── HttpClient.java │ │ │ │ ├── HttpClientProvider.java │ │ │ │ ├── HttpResponse.java │ │ │ │ ├── InstallNodeDistribution.java │ │ │ │ ├── InstallNodeDistributionCommand.java │ │ │ │ ├── InvalidDistributionUrlException.java │ │ │ │ ├── InvalidNodeDistributionException.java │ │ │ │ ├── IsNonProxyHost.java │ │ │ │ ├── IsNonProxyHostCommand.java │ │ │ │ ├── NodeDistributionShasumNotFoundException.java │ │ │ │ ├── ProxySettings.java │ │ │ │ ├── ReadNodeDistributionShasum.java │ │ │ │ ├── ReadNodeDistributionShasumCommand.java │ │ │ │ ├── ResolveNodeDistributionArchitectureId.java │ │ │ │ ├── ResolveNodeDistributionType.java │ │ │ │ ├── ResolveNodeDistributionUrl.java │ │ │ │ ├── ResolveNodeDistributionUrlCommand.java │ │ │ │ ├── ResolveProxySettingsByUrl.java │ │ │ │ ├── ResolveProxySettingsByUrlCommand.java │ │ │ │ ├── ResourceDownloadException.java │ │ │ │ ├── RetrySettings.java │ │ │ │ ├── RetryableResourceDownloadException.java │ │ │ │ ├── SelectProxySettings.java │ │ │ │ ├── SelectProxySettingsCommand.java │ │ │ │ ├── UnsupportedDistributionArchiveException.java │ │ │ │ ├── ValidateNodeDistribution.java │ │ │ │ ├── ValidateNodeDistributionCommand.java │ │ │ │ └── archiver │ │ │ │ │ ├── AbstractArchiver.java │ │ │ │ │ ├── ArchiveEntry.java │ │ │ │ │ ├── Archiver.java │ │ │ │ │ ├── ArchiverContext.java │ │ │ │ │ ├── ArchiverException.java │ │ │ │ │ ├── ArchiverProvider.java │ │ │ │ │ ├── DirectoryNotFoundException.java │ │ │ │ │ ├── ExplodeCommand.java │ │ │ │ │ ├── InvalidRelativizedSymbolicLinkTargetException.java │ │ │ │ │ ├── SlipAttackException.java │ │ │ │ │ └── UnsupportedEntryException.java │ │ │ └── package-info.java │ │ │ ├── infrastructure │ │ │ ├── archiver │ │ │ │ ├── ArchiverProviderImpl.java │ │ │ │ ├── TarArchiver.java │ │ │ │ ├── TarArchiverContext.java │ │ │ │ ├── TarEntry.java │ │ │ │ ├── UnexpectedEofException.java │ │ │ │ ├── ZipArchiver.java │ │ │ │ ├── ZipArchiverContext.java │ │ │ │ ├── ZipEntry.java │ │ │ │ └── package-info.java │ │ │ ├── bean │ │ │ │ ├── BeanInstanciationException.java │ │ │ │ ├── BeanRegistry.java │ │ │ │ ├── BeanRegistryException.java │ │ │ │ ├── TooManyCandidateBeansException.java │ │ │ │ ├── ZeroOrMultiplePublicConstructorsException.java │ │ │ │ └── package-info.java │ │ │ ├── gradle │ │ │ │ ├── AbstractRunCommandTask.java │ │ │ │ ├── AssembleTask.java │ │ │ │ ├── BeanRegistryBuildService.java │ │ │ │ ├── CheckTask.java │ │ │ │ ├── ExecSpecAction.java │ │ │ │ ├── FrontendExtension.java │ │ │ │ ├── GradleLoggerAdapter.java │ │ │ │ ├── GradleScriptRunnerAdapter.java │ │ │ │ ├── GradleSettings.java │ │ │ │ ├── InstallCorepackTask.java │ │ │ │ ├── InstallFrontendTask.java │ │ │ │ ├── InstallNodeTask.java │ │ │ │ ├── InstallPackageManagerTask.java │ │ │ │ ├── NonRunnableTaskException.java │ │ │ │ ├── PublishTask.java │ │ │ │ ├── ResolvePackageManagerTask.java │ │ │ │ ├── RunCommandTaskTypes.java │ │ │ │ ├── RunCorepackTask.java │ │ │ │ ├── RunCorepackTaskType.java │ │ │ │ ├── RunNodeTask.java │ │ │ │ ├── RunNodeTaskType.java │ │ │ │ ├── RunNpmTask.java │ │ │ │ ├── RunNpmTaskType.java │ │ │ │ ├── RunPnpmTask.java │ │ │ │ ├── RunPnpmTaskType.java │ │ │ │ ├── RunYarnTask.java │ │ │ │ ├── RunYarnTaskType.java │ │ │ │ ├── ScriptProperties.java │ │ │ │ ├── SystemProviders.java │ │ │ │ ├── TaskLoggerInitializer.java │ │ │ │ └── package-info.java │ │ │ ├── httpclient │ │ │ │ ├── ApacheHttpClient.java │ │ │ │ ├── ApacheHttpResponse.java │ │ │ │ ├── HttpClientProviderImpl.java │ │ │ │ └── LocalFileHttpResponse.java │ │ │ └── system │ │ │ │ ├── ChannelProviderImpl.java │ │ │ │ ├── FileManagerImpl.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── siouan │ │ │ └── frontendgradleplugin │ │ │ ├── FrontendGradlePluginTest.java │ │ │ ├── domain │ │ │ ├── AbstractResolveExecutablePathTest.java │ │ │ ├── GetExecutablePathTest.java │ │ │ ├── PackageManagerFixture.java │ │ │ ├── PackageManagerTypeTest.java │ │ │ ├── ParsePackageManagerFromPackageJsonFileTest.java │ │ │ ├── ParsePackageManagerSpecificationTest.java │ │ │ ├── PathUtilsTest.java │ │ │ ├── PlatformFixture.java │ │ │ ├── PlatformTest.java │ │ │ ├── ResolveCorepackExecutablePathTest.java │ │ │ ├── ResolveExecutionSettingsTest.java │ │ │ ├── ResolveNodeExecutablePathTest.java │ │ │ ├── ResolveNpmExecutablePathTest.java │ │ │ ├── ResolvePackageManagerTest.java │ │ │ ├── ResolvePnpmExecutablePathTest.java │ │ │ ├── ResolveYarnExecutablePathTest.java │ │ │ ├── StringSplitterTest.java │ │ │ ├── SystemPropertiesFixture.java │ │ │ └── installer │ │ │ │ ├── AbstractHttpClientTest.java │ │ │ │ ├── BuildTemporaryFileNameTest.java │ │ │ │ ├── ConvertToHexadecimalStringTest.java │ │ │ │ ├── CredentialsFixture.java │ │ │ │ ├── DeployDistributionTest.java │ │ │ │ ├── DownloadResourceCommandFixture.java │ │ │ │ ├── DownloadResourceTest.java │ │ │ │ ├── GetDistributionTest.java │ │ │ │ ├── HashFileTest.java │ │ │ │ ├── InstallNodeDistributionTest.java │ │ │ │ ├── IsNonProxyHostTest.java │ │ │ │ ├── ProxySettingsFixture.java │ │ │ │ ├── ReadNodeDistributionShasumTest.java │ │ │ │ ├── ResolveNodeDistributionArchitectureIdTest.java │ │ │ │ ├── ResolveNodeDistributionTypeTest.java │ │ │ │ ├── ResolveNodeDistributionUrlTest.java │ │ │ │ ├── ResolveProxySettingsByUrlTest.java │ │ │ │ ├── RetrySettingsFixture.java │ │ │ │ ├── SelectProxySettingsTest.java │ │ │ │ ├── ValidateNodeDistributionTest.java │ │ │ │ └── archiver │ │ │ │ ├── AbstractArchiverTest.java │ │ │ │ ├── ArchiveEntryImpl.java │ │ │ │ ├── ArchiveEntryType.java │ │ │ │ └── ArchiverImpl.java │ │ │ ├── infrastructure │ │ │ ├── archiver │ │ │ │ ├── ArchiverProviderImplTest.java │ │ │ │ ├── TarArchiverContextTest.java │ │ │ │ ├── TarArchiverTest.java │ │ │ │ ├── TarEntryTest.java │ │ │ │ ├── ZipArchiverContextTest.java │ │ │ │ ├── ZipArchiverTest.java │ │ │ │ └── ZipEntryTest.java │ │ │ ├── bean │ │ │ │ └── BeanRegistryTest.java │ │ │ ├── gradle │ │ │ │ ├── ExecSpecActionTest.java │ │ │ │ ├── GradleLoggerAdapterTest.java │ │ │ │ ├── GradleScriptRunnerAdapterTest.java │ │ │ │ ├── SystemProvidersTest.java │ │ │ │ └── TaskLoggerInitializerTest.java │ │ │ └── system │ │ │ │ └── FileManagerImplTest.java │ │ │ └── test │ │ │ ├── PathFixture.java │ │ │ ├── Resources.java │ │ │ └── package-info.java │ │ └── resources │ │ ├── archive-linux.zip │ │ ├── archive-win.zip │ │ ├── archive.tar │ │ ├── archive.tar.gz │ │ └── invalid-archive.unknown ├── frontend-jdk21 │ ├── build.gradle.kts │ ├── gradle.properties │ └── src │ │ ├── integrationTest │ │ ├── java │ │ │ └── org │ │ │ │ └── siouan │ │ │ │ └── frontendgradleplugin │ │ │ │ ├── infrastructure │ │ │ │ └── gradle │ │ │ │ │ ├── AssembleFrontedTaskFuncTest.java │ │ │ │ │ ├── AuthenticationAndProxyFuncTest.java │ │ │ │ │ ├── CheckFrontendTaskFuncTest.java │ │ │ │ │ ├── InstallCorepackTaskFuncTest.java │ │ │ │ │ ├── InstallFrontendTaskFuncTest.java │ │ │ │ │ ├── InstallNodeTaskFuncTest.java │ │ │ │ │ ├── InstallPackageManagerTaskFuncTest.java │ │ │ │ │ ├── MultiProjectsFuncTest.java │ │ │ │ │ ├── PublishFrontendTaskFuncTest.java │ │ │ │ │ ├── ResolvePackageManagerTaskFuncTest.java │ │ │ │ │ ├── RunCorepackTaskFuncTest.java │ │ │ │ │ ├── RunNodeTaskFuncTest.java │ │ │ │ │ ├── RunNpmTaskFuncTest.java │ │ │ │ │ ├── RunPnpmTaskFuncTest.java │ │ │ │ │ ├── RunYarnTaskFuncTest.java │ │ │ │ │ ├── TaskTypesWithDownloadedDistributionsFuncTest.java │ │ │ │ │ └── TaskTypesWithProvidedDistributionsFuncTest.java │ │ │ │ └── test │ │ │ │ ├── FrontendMapBuilder.java │ │ │ │ ├── GradleBuildAssertions.java │ │ │ │ ├── GradleBuildFiles.java │ │ │ │ ├── GradleHelper.java │ │ │ │ ├── GradleSettingsFiles.java │ │ │ │ ├── PluginTaskOutcome.java │ │ │ │ ├── ServerConfigurator.java │ │ │ │ └── TaskTypes.java │ │ └── resources │ │ │ ├── SHASUMS256.txt │ │ │ ├── node-dist-provided │ │ │ ├── bin │ │ │ │ ├── corepack │ │ │ │ ├── node │ │ │ │ ├── npm │ │ │ │ ├── npx │ │ │ │ ├── pnpm │ │ │ │ ├── pnpx │ │ │ │ └── yarn │ │ │ ├── corepack.cmd │ │ │ ├── node.exe │ │ │ ├── npm.cmd │ │ │ ├── npx.cmd │ │ │ ├── pnpm.cmd │ │ │ ├── pnpx.cmd │ │ │ └── yarn.cmd │ │ │ ├── node-dist-without-node │ │ │ ├── bin │ │ │ │ ├── corepack │ │ │ │ ├── npm │ │ │ │ ├── npx │ │ │ │ ├── pnpm │ │ │ │ ├── pnpx │ │ │ │ └── yarn │ │ │ ├── corepack.cmd │ │ │ ├── npm.cmd │ │ │ ├── npx.cmd │ │ │ ├── pnpm.cmd │ │ │ ├── pnpx.cmd │ │ │ └── yarn.cmd │ │ │ ├── node-v22.11.0.zip │ │ │ ├── package-any-manager.json │ │ │ ├── package-invalid-manager.json │ │ │ ├── package-no-manager.json │ │ │ ├── package-npm.json │ │ │ ├── package-pnpm.json │ │ │ └── package-yarn.json │ │ ├── main │ │ └── java │ │ │ └── org │ │ │ └── siouan │ │ │ └── frontendgradleplugin │ │ │ ├── FrontendGradlePlugin.java │ │ │ ├── domain │ │ │ ├── AbstractResolveExecutablePath.java │ │ │ ├── ChannelProvider.java │ │ │ ├── ExecutableType.java │ │ │ ├── ExecutionSettings.java │ │ │ ├── FileManager.java │ │ │ ├── FrontendException.java │ │ │ ├── GetExecutablePath.java │ │ │ ├── GetExecutablePathCommand.java │ │ │ ├── InvalidJsonFileException.java │ │ │ ├── Logger.java │ │ │ ├── MalformedPackageManagerSpecification.java │ │ │ ├── PackageManager.java │ │ │ ├── PackageManagerType.java │ │ │ ├── ParsePackageManagerFromPackageJsonFile.java │ │ │ ├── ParsePackageManagerSpecification.java │ │ │ ├── PathUtils.java │ │ │ ├── Platform.java │ │ │ ├── ResolveCorepackExecutablePath.java │ │ │ ├── ResolveExecutablePathCommand.java │ │ │ ├── ResolveExecutionSettings.java │ │ │ ├── ResolveExecutionSettingsCommand.java │ │ │ ├── ResolveNodeExecutablePath.java │ │ │ ├── ResolveNpmExecutablePath.java │ │ │ ├── ResolvePackageManager.java │ │ │ ├── ResolvePackageManagerCommand.java │ │ │ ├── ResolvePnpmExecutablePath.java │ │ │ ├── ResolveYarnExecutablePath.java │ │ │ ├── StringSplitter.java │ │ │ ├── SystemProperties.java │ │ │ ├── UnsupportedPackageManagerException.java │ │ │ ├── UnsupportedPlatformException.java │ │ │ ├── installer │ │ │ │ ├── AbstractHttpClient.java │ │ │ │ ├── BuildTemporaryFileName.java │ │ │ │ ├── ConvertToHexadecimalString.java │ │ │ │ ├── Credentials.java │ │ │ │ ├── DeployDistribution.java │ │ │ │ ├── DeployDistributionCommand.java │ │ │ │ ├── DownloadResource.java │ │ │ │ ├── DownloadResourceCommand.java │ │ │ │ ├── GetDistribution.java │ │ │ │ ├── GetDistributionCommand.java │ │ │ │ ├── HashFile.java │ │ │ │ ├── HttpClient.java │ │ │ │ ├── HttpClientProvider.java │ │ │ │ ├── HttpResponse.java │ │ │ │ ├── InstallNodeDistribution.java │ │ │ │ ├── InstallNodeDistributionCommand.java │ │ │ │ ├── InvalidDistributionUrlException.java │ │ │ │ ├── InvalidNodeDistributionException.java │ │ │ │ ├── IsNonProxyHost.java │ │ │ │ ├── IsNonProxyHostCommand.java │ │ │ │ ├── NodeDistributionShasumNotFoundException.java │ │ │ │ ├── ProxySettings.java │ │ │ │ ├── ReadNodeDistributionShasum.java │ │ │ │ ├── ReadNodeDistributionShasumCommand.java │ │ │ │ ├── ResolveNodeDistributionArchitectureId.java │ │ │ │ ├── ResolveNodeDistributionType.java │ │ │ │ ├── ResolveNodeDistributionUrl.java │ │ │ │ ├── ResolveNodeDistributionUrlCommand.java │ │ │ │ ├── ResolveProxySettingsByUrl.java │ │ │ │ ├── ResolveProxySettingsByUrlCommand.java │ │ │ │ ├── ResourceDownloadException.java │ │ │ │ ├── RetrySettings.java │ │ │ │ ├── RetryableResourceDownloadException.java │ │ │ │ ├── SelectProxySettings.java │ │ │ │ ├── SelectProxySettingsCommand.java │ │ │ │ ├── UnsupportedDistributionArchiveException.java │ │ │ │ ├── ValidateNodeDistribution.java │ │ │ │ ├── ValidateNodeDistributionCommand.java │ │ │ │ └── archiver │ │ │ │ │ ├── AbstractArchiver.java │ │ │ │ │ ├── ArchiveEntry.java │ │ │ │ │ ├── Archiver.java │ │ │ │ │ ├── ArchiverContext.java │ │ │ │ │ ├── ArchiverException.java │ │ │ │ │ ├── ArchiverProvider.java │ │ │ │ │ ├── DirectoryNotFoundException.java │ │ │ │ │ ├── ExplodeCommand.java │ │ │ │ │ ├── InvalidRelativizedSymbolicLinkTargetException.java │ │ │ │ │ ├── SlipAttackException.java │ │ │ │ │ └── UnsupportedEntryException.java │ │ │ └── package-info.java │ │ │ ├── infrastructure │ │ │ ├── archiver │ │ │ │ ├── ArchiverProviderImpl.java │ │ │ │ ├── TarArchiver.java │ │ │ │ ├── TarArchiverContext.java │ │ │ │ ├── TarEntry.java │ │ │ │ ├── UnexpectedEofException.java │ │ │ │ ├── ZipArchiver.java │ │ │ │ ├── ZipArchiverContext.java │ │ │ │ ├── ZipEntry.java │ │ │ │ └── package-info.java │ │ │ ├── bean │ │ │ │ ├── BeanInstanciationException.java │ │ │ │ ├── BeanRegistry.java │ │ │ │ ├── BeanRegistryException.java │ │ │ │ ├── TooManyCandidateBeansException.java │ │ │ │ ├── ZeroOrMultiplePublicConstructorsException.java │ │ │ │ └── package-info.java │ │ │ ├── gradle │ │ │ │ ├── AbstractRunCommandTask.java │ │ │ │ ├── AssembleTask.java │ │ │ │ ├── BeanRegistryBuildService.java │ │ │ │ ├── CheckTask.java │ │ │ │ ├── ExecSpecAction.java │ │ │ │ ├── FrontendExtension.java │ │ │ │ ├── GradleLoggerAdapter.java │ │ │ │ ├── GradleScriptRunnerAdapter.java │ │ │ │ ├── GradleSettings.java │ │ │ │ ├── InstallCorepackTask.java │ │ │ │ ├── InstallFrontendTask.java │ │ │ │ ├── InstallNodeTask.java │ │ │ │ ├── InstallPackageManagerTask.java │ │ │ │ ├── NonRunnableTaskException.java │ │ │ │ ├── PublishTask.java │ │ │ │ ├── ResolvePackageManagerTask.java │ │ │ │ ├── RunCommandTaskTypes.java │ │ │ │ ├── RunCorepackTask.java │ │ │ │ ├── RunCorepackTaskType.java │ │ │ │ ├── RunNodeTask.java │ │ │ │ ├── RunNodeTaskType.java │ │ │ │ ├── RunNpmTask.java │ │ │ │ ├── RunNpmTaskType.java │ │ │ │ ├── RunPnpmTask.java │ │ │ │ ├── RunPnpmTaskType.java │ │ │ │ ├── RunYarnTask.java │ │ │ │ ├── RunYarnTaskType.java │ │ │ │ ├── ScriptProperties.java │ │ │ │ ├── SystemProviders.java │ │ │ │ ├── TaskLoggerInitializer.java │ │ │ │ └── package-info.java │ │ │ ├── httpclient │ │ │ │ ├── ApacheHttpClient.java │ │ │ │ ├── ApacheHttpResponse.java │ │ │ │ ├── HttpClientProviderImpl.java │ │ │ │ └── LocalFileHttpResponse.java │ │ │ └── system │ │ │ │ ├── ChannelProviderImpl.java │ │ │ │ ├── FileManagerImpl.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── siouan │ │ │ └── frontendgradleplugin │ │ │ ├── FrontendGradlePluginTest.java │ │ │ ├── domain │ │ │ ├── AbstractResolveExecutablePathTest.java │ │ │ ├── GetExecutablePathTest.java │ │ │ ├── PackageManagerFixture.java │ │ │ ├── PackageManagerTypeTest.java │ │ │ ├── ParsePackageManagerFromPackageJsonFileTest.java │ │ │ ├── ParsePackageManagerSpecificationTest.java │ │ │ ├── PathUtilsTest.java │ │ │ ├── PlatformFixture.java │ │ │ ├── PlatformTest.java │ │ │ ├── ResolveCorepackExecutablePathTest.java │ │ │ ├── ResolveExecutionSettingsTest.java │ │ │ ├── ResolveNodeExecutablePathTest.java │ │ │ ├── ResolveNpmExecutablePathTest.java │ │ │ ├── ResolvePackageManagerTest.java │ │ │ ├── ResolvePnpmExecutablePathTest.java │ │ │ ├── ResolveYarnExecutablePathTest.java │ │ │ ├── StringSplitterTest.java │ │ │ ├── SystemPropertiesFixture.java │ │ │ └── installer │ │ │ │ ├── AbstractHttpClientTest.java │ │ │ │ ├── BuildTemporaryFileNameTest.java │ │ │ │ ├── ConvertToHexadecimalStringTest.java │ │ │ │ ├── CredentialsFixture.java │ │ │ │ ├── DeployDistributionTest.java │ │ │ │ ├── DownloadResourceCommandFixture.java │ │ │ │ ├── DownloadResourceTest.java │ │ │ │ ├── GetDistributionTest.java │ │ │ │ ├── HashFileTest.java │ │ │ │ ├── InstallNodeDistributionTest.java │ │ │ │ ├── IsNonProxyHostTest.java │ │ │ │ ├── ProxySettingsFixture.java │ │ │ │ ├── ReadNodeDistributionShasumTest.java │ │ │ │ ├── ResolveNodeDistributionArchitectureIdTest.java │ │ │ │ ├── ResolveNodeDistributionTypeTest.java │ │ │ │ ├── ResolveNodeDistributionUrlTest.java │ │ │ │ ├── ResolveProxySettingsByUrlTest.java │ │ │ │ ├── RetrySettingsFixture.java │ │ │ │ ├── SelectProxySettingsTest.java │ │ │ │ ├── ValidateNodeDistributionTest.java │ │ │ │ └── archiver │ │ │ │ ├── AbstractArchiverTest.java │ │ │ │ ├── ArchiveEntryImpl.java │ │ │ │ ├── ArchiveEntryType.java │ │ │ │ └── ArchiverImpl.java │ │ │ ├── infrastructure │ │ │ ├── archiver │ │ │ │ ├── ArchiverProviderImplTest.java │ │ │ │ ├── TarArchiverContextTest.java │ │ │ │ ├── TarArchiverTest.java │ │ │ │ ├── TarEntryTest.java │ │ │ │ ├── ZipArchiverContextTest.java │ │ │ │ ├── ZipArchiverTest.java │ │ │ │ └── ZipEntryTest.java │ │ │ ├── bean │ │ │ │ └── BeanRegistryTest.java │ │ │ ├── gradle │ │ │ │ ├── ExecSpecActionTest.java │ │ │ │ ├── GradleLoggerAdapterTest.java │ │ │ │ ├── GradleScriptRunnerAdapterTest.java │ │ │ │ ├── SystemProvidersTest.java │ │ │ │ └── TaskLoggerInitializerTest.java │ │ │ └── system │ │ │ │ └── FileManagerImplTest.java │ │ │ └── test │ │ │ ├── PathFixture.java │ │ │ ├── Resources.java │ │ │ └── package-info.java │ │ └── resources │ │ ├── archive-linux.zip │ │ ├── archive-win.zip │ │ ├── archive.tar │ │ ├── archive.tar.gz │ │ └── invalid-archive.unknown ├── gradle │ └── libs.versions.toml ├── lombok.config └── settings.gradle.kts ├── resources ├── akhq-dark.svg ├── akhq-light.png ├── egeria-dark.png ├── egeria-light.png ├── gradle-icon.svg ├── intellij-idea-icon.svg ├── jetbrains-logo.svg ├── kestra-dark.svg ├── kestra-light.png ├── nodejs-icon.svg ├── npm-icon.svg ├── pnpm-icon.svg ├── serverpackcreator-dark.png ├── serverpackcreator-light.png ├── x-road-dark.png ├── x-road-light.png └── yarn-icon.svg ├── settings.gradle.kts └── site ├── .prettierrc.json ├── .yarnrc.yml ├── build.gradle.kts ├── eslint.config.mjs ├── nuxt.config.ts ├── package.json ├── src ├── app.vue ├── app │ └── router.options.ts ├── assets │ ├── EtelkaTextPro.otf │ ├── scss │ │ ├── custom.scss │ │ └── variables.scss │ └── siouan-icon.svg ├── components │ ├── block-quote.vue │ ├── code-comment.vue │ ├── code.vue │ ├── faq │ │ ├── cache-directory-faq.vue │ │ ├── custom-environment-variables-faq.vue │ │ ├── custom-nodejs-distribution-server-faq.vue │ │ ├── faq.vue │ │ ├── node-corepack-npm-pnpm-yarn-direct-use-faq.vue │ │ ├── node-install-directory-from-environment-faq.vue │ │ └── unsupported-platform-exception-faq.vue │ ├── feature-card.vue │ ├── footer.vue │ ├── form │ │ ├── release-selector.vue │ │ ├── select.vue │ │ └── theme-selector.vue │ ├── gradle-scripts.vue │ ├── header.vue │ ├── image.vue │ ├── info.vue │ ├── link │ │ ├── corepack-link.vue │ │ ├── github-link.vue │ │ ├── gradle-docs-link.vue │ │ ├── gradle-guides-link.vue │ │ ├── gradle-link.vue │ │ ├── gradle-plugins-link.vue │ │ ├── gradle-task-outcome-link.vue │ │ ├── image-link.vue │ │ ├── java-network-properties-link.vue │ │ ├── java-system-properties-link.vue │ │ ├── link.vue │ │ ├── nodejs-link.vue │ │ ├── npm-docs-link.vue │ │ ├── npm-link.vue │ │ ├── pnpm-link.vue │ │ ├── property-link-anchor.vue │ │ ├── property-link.vue │ │ ├── repo-link.vue │ │ ├── site-link-anchor.vue │ │ ├── site-link.vue │ │ ├── task-link-anchor.vue │ │ ├── task-link.vue │ │ └── yarn-link.vue │ ├── main-title.vue │ ├── maintenance.vue │ ├── menubar.vue │ ├── property │ │ ├── assemble-script-property.vue │ │ ├── cache-directory-property.vue │ │ ├── check-script-property.vue │ │ ├── corepack-version-property.vue │ │ ├── http-proxy-host-property.vue │ │ ├── http-proxy-password-property.vue │ │ ├── http-proxy-port-property.vue │ │ ├── http-proxy-username-property.vue │ │ ├── https-proxy-host-property.vue │ │ ├── https-proxy-password-property.vue │ │ ├── https-proxy-port-property.vue │ │ ├── https-proxy-username-property.vue │ │ ├── install-script-property.vue │ │ ├── max-download-attempts-property.vue │ │ ├── node-distribution-provided-property.vue │ │ ├── node-distribution-server-password-property.vue │ │ ├── node-distribution-server-username-property.vue │ │ ├── node-distribution-url-path-pattern-property.vue │ │ ├── node-distribution-url-root-property.vue │ │ ├── node-install-directory-property.vue │ │ ├── node-version-property.vue │ │ ├── package-json-directory-property.vue │ │ ├── property.vue │ │ ├── publish-script-property.vue │ │ ├── retry-http-statuses-property.vue │ │ ├── retry-initial-interval-ms-property.vue │ │ ├── retry-interval-multiplier-property.vue │ │ ├── retry-max-interval-ms-property.vue │ │ └── verbose-mode-enabled-property.vue │ ├── reference-organizations.vue │ ├── section-title.vue │ ├── sub-sub-title.vue │ ├── sub-title.vue │ ├── task │ │ ├── assemble-frontend-task.vue │ │ ├── check-frontend-task.vue │ │ ├── dependency-tree.vue │ │ ├── install-corepack-task.vue │ │ ├── install-frontend-task.vue │ │ ├── install-node-task.vue │ │ ├── install-package-manager-task.vue │ │ ├── optional-task-property-badge.vue │ │ ├── publish-frontend-task.vue │ │ ├── resolve-package-manager-task.vue │ │ ├── run-corepack-task-type.vue │ │ ├── run-corepack-task.vue │ │ ├── run-node-task-type.vue │ │ ├── run-node-task.vue │ │ ├── run-npm-task-type.vue │ │ ├── run-npm-task.vue │ │ ├── run-pnpm-task-type.vue │ │ ├── run-pnpm-task.vue │ │ ├── run-yarn-task-type.vue │ │ ├── run-yarn-task.vue │ │ ├── task-property-command-line-option-badge.vue │ │ ├── task-property-type.vue │ │ └── task.vue │ ├── v5 │ │ ├── property │ │ │ ├── node-distribution-provided-property-v5.vue │ │ │ ├── package-json-directory-property-v5.vue │ │ │ ├── yarn-distribution-provided-property-v5.vue │ │ │ ├── yarn-distribution-server-password-property-v5.vue │ │ │ ├── yarn-distribution-server-username-property-v5.vue │ │ │ ├── yarn-distribution-url-path-pattern-property-v5.vue │ │ │ ├── yarn-distribution-url-root-property-v5.vue │ │ │ ├── yarn-enabled-property-v5.vue │ │ │ ├── yarn-install-directory-property-v5.vue │ │ │ └── yarn-version-property-v5.vue │ │ └── task │ │ │ ├── dependency-tree-v5.vue │ │ │ ├── install-yarn-task-v5.vue │ │ │ └── run-npm-yarn-task-type-v5.vue │ ├── v6 │ │ ├── faq │ │ │ ├── node-npm-npx-direct-use-faq-v6.vue │ │ │ └── yarn-direct-use-faq-v6.vue │ │ ├── link │ │ │ └── npx-link-v6.vue │ │ ├── property │ │ │ ├── node-distribution-provided-property-v6.vue │ │ │ ├── node-install-directory-property-v6.vue │ │ │ ├── node-version-property-v6.vue │ │ │ └── yarn-version-property-v6.vue │ │ └── task │ │ │ ├── assemble-frontend-task-v6.vue │ │ │ ├── check-frontend-task-v6.vue │ │ │ ├── clean-frontend-task-v6.vue │ │ │ ├── dependency-tree-v6.vue │ │ │ ├── enable-yarn-berry-task-v6.vue │ │ │ ├── install-frontend-task-v6.vue │ │ │ ├── install-global-yarn-task-v6.vue │ │ │ ├── install-node-task-v6.vue │ │ │ ├── install-yarn-task-v6.vue │ │ │ ├── publish-frontend-task-v6.vue │ │ │ ├── run-node-task-type-v6.vue │ │ │ ├── run-npm-task-type-v6.vue │ │ │ ├── run-npx-task-type-v6.vue │ │ │ └── run-yarn-task-type-v6.vue │ ├── v7 │ │ ├── property │ │ │ ├── node-distribution-provided-property-v7.vue │ │ │ └── node-install-directory-property-v7.vue │ │ └── task │ │ │ ├── assemble-frontend-task-v7.vue │ │ │ ├── check-frontend-task-v7.vue │ │ │ ├── clean-frontend-task-v7.vue │ │ │ ├── dependency-tree-v7.vue │ │ │ ├── install-frontend-task-v7.vue │ │ │ ├── install-node-task-v7.vue │ │ │ ├── install-package-manager-task-v7.vue │ │ │ ├── publish-frontend-task-v7.vue │ │ │ └── resolve-package-manager-task-v7.vue │ ├── v8 │ │ └── task │ │ │ ├── dependency-tree-v8.vue │ │ │ ├── run-corepack-task-type-v8.vue │ │ │ ├── run-node-task-type-v8.vue │ │ │ ├── run-npm-task-type-v8.vue │ │ │ ├── run-pnpm-task-type-v8.vue │ │ │ └── run-yarn-task-type-v8.vue │ ├── v9 │ │ ├── faq │ │ │ └── cache-directory-faq-v9.vue │ │ ├── property │ │ │ ├── clean-script-property-v9.vue │ │ │ ├── node-distribution-provided-property-v9.vue │ │ │ ├── node-install-directory-property-v9.vue │ │ │ └── package-json-directory-property-v9.vue │ │ └── task │ │ │ ├── clean-frontend-task-v9.vue │ │ │ └── dependency-tree-v9.vue │ └── warning.vue ├── i18n │ └── i18n.config.ts ├── layouts │ └── default.vue ├── modules │ └── legacy-routes.ts ├── pages │ ├── 5 │ │ ├── configuration.vue │ │ ├── faqs.vue │ │ ├── getting-started.vue │ │ ├── index.vue │ │ └── node-corepack-npm-pnpm-yarn-tasks.vue │ ├── 6 │ │ ├── configuration.vue │ │ ├── faqs.vue │ │ ├── getting-started.vue │ │ ├── index.vue │ │ └── node-corepack-npm-pnpm-yarn-tasks.vue │ ├── 7 │ │ ├── configuration.vue │ │ ├── faqs.vue │ │ ├── getting-started.vue │ │ ├── index.vue │ │ └── node-corepack-npm-pnpm-yarn-tasks.vue │ ├── 8 │ │ ├── configuration.vue │ │ ├── faqs.vue │ │ ├── getting-started.vue │ │ ├── index.vue │ │ └── node-corepack-npm-pnpm-yarn-tasks.vue │ ├── 9 │ │ ├── configuration.vue │ │ ├── faqs.vue │ │ ├── getting-started.vue │ │ ├── index.vue │ │ └── node-corepack-npm-pnpm-yarn-tasks.vue │ ├── configuration.vue │ ├── faqs.vue │ ├── getting-started.vue │ ├── index.vue │ └── node-corepack-npm-pnpm-yarn-tasks.vue ├── public │ ├── .nojekyll │ ├── EtelkaTextPro.otf │ ├── akhq.svg │ ├── egeria.png │ ├── kestra.svg │ ├── serverpackcreator.png │ ├── siouan-icon.png │ ├── siouan-icon.svg │ ├── sitemap.xml │ └── x-road.png ├── server │ └── tsconfig.json ├── stores │ └── main-store.ts └── utils │ ├── component-size.ts │ ├── path-helper.ts │ ├── script-language.ts │ ├── storage.ts │ ├── task-outcome.ts │ ├── task-property.ts │ └── theme.ts ├── tsconfig.json └── yarn.lock /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Request a feature 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | > Before creating an issue, please: 11 | > - Check you are using the latest plugin release. 12 | > - Check the issue was not reported yet. 13 | 14 | --- 15 | 16 | Hi, 17 | 18 | **Description** 19 | 20 | Explain what you would like the plugin do: ... 21 | 22 | **Target environment** 23 | 24 | - OS: [e.g. Ubuntu 24.04, Windows 11 Pro, Mac OS X] 25 | - JDK: [e.g. Adoptium Temurin JDK 21 64 bits] 26 | - Gradle: [e.g. Gradle 8.11.1] 27 | - Frontend Gradle plugin: [e.g. 10.0.0 JDK 21] 28 | 29 | Settings in `build.gradle[.kts]` file: 30 | ```groovy 31 | frontend { 32 | // Provide the expected plugin settings. 33 | } 34 | ``` 35 | 36 | **Attachments** 37 | Additionally, you may attach files to help understanding the need. 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /frontend-jdk*/buildSrc/out/ 2 | /frontend-jdk*/out/ 3 | /site/.frontend-gradle-plugin 4 | /site/.nuxt/ 5 | /site/.output/ 6 | /site/.pnp.* 7 | /site/.yarn/ 8 | !/site/.yarn/patches 9 | !/site/.yarn/plugins 10 | !/site/.yarn/releases 11 | !/site/.yarn/sdks 12 | !/site/.yarn/versions 13 | /site/dist/ 14 | /site/node/ 15 | /site/node_modules/ 16 | .idea/ 17 | .gradle/ 18 | build/ 19 | -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | tasks.named("wrapper") { 2 | distributionType = Wrapper.DistributionType.ALL 3 | } 4 | -------------------------------------------------------------------------------- /examples/application-with-preinstalled-nodejs-distribution/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "packageManager": "npm@10.9.0", 4 | "scripts": { 5 | "build": "echo Building frontend", 6 | "check": "echo Checking frontend && npm run lint && npm run test", 7 | "lint": "echo Linting frontend", 8 | "test": "echo Testing frontend" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /examples/fullstack-war-application/backend/src/main/java/com/example/springboot/Application.java: -------------------------------------------------------------------------------- 1 | package com.example.springboot; 2 | 3 | import java.util.Arrays; 4 | 5 | import org.springframework.boot.SpringApplication; 6 | import org.springframework.boot.autoconfigure.SpringBootApplication; 7 | 8 | @SpringBootApplication 9 | public class Application { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(Application.class, args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /examples/fullstack-war-application/backend/src/main/java/com/example/springboot/HelloController.java: -------------------------------------------------------------------------------- 1 | package com.example.springboot; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | 6 | @Controller 7 | public class HelloController { 8 | 9 | @RequestMapping("/") 10 | public String index() { 11 | return "index.html"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /examples/fullstack-war-application/frontend/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("org.siouan.frontend-jdk21") version "10.0.0" 3 | } 4 | 5 | frontend { 6 | nodeVersion.set("22.11.0") 7 | assembleScript.set("run build") 8 | checkScript.set("run check") 9 | } 10 | -------------------------------------------------------------------------------- /examples/fullstack-war-application/frontend/config/config.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | 3 | fs.copyFile('src/main/webapp/index.html', 'build/www/index.html', (err) => { 4 | if (err) { 5 | throw err; 6 | } 7 | console.log('Copied index.html!'); 8 | }); 9 | -------------------------------------------------------------------------------- /examples/fullstack-war-application/frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "packageManager": "npm@10.9.0", 4 | "devDependencies": { 5 | "mkdirp": "^3.0.1" 6 | }, 7 | "scripts": { 8 | "build": "echo Building frontend && mkdirp build/www && node config/config.js", 9 | "check": "echo Checking frontend && npm run lint && npm run test", 10 | "lint": "echo Linting frontend", 11 | "test": "echo Testing frontend" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /examples/fullstack-war-application/frontend/src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Frontend Gradle plugin example - Full-stack WAR application with Spring Boot 5 | 6 | 7 | 8 |

Hello from the frontend-gradle-plugin!

9 | 10 | 11 | -------------------------------------------------------------------------------- /examples/fullstack-war-application/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | include("backend", "frontend") 2 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/build.gradle.kts: -------------------------------------------------------------------------------- 1 | project.ext.set("nodeInstallDirectory", "${project.rootDir}/node") 2 | 3 | tasks.named("wrapper") { 4 | distributionType = Wrapper.DistributionType.ALL 5 | } 6 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.parallel=true 2 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/gradle/libs.versions.toml: -------------------------------------------------------------------------------- 1 | [versions] 2 | frontend-version = "10.0.0" 3 | 4 | [plugins] 5 | frontend = { id ="org.siouan.frontend-jdk21", version.ref = "frontend-version" } 6 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/node-subproject/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import org.siouan.frontendgradleplugin.infrastructure.gradle.RunNodeTaskType 2 | 3 | plugins { 4 | alias(libs.plugins.frontend) 5 | } 6 | 7 | frontend { 8 | nodeVersion.set("22.11.0") 9 | nodeInstallDirectory.set(file(rootProject.ext.get("nodeInstallDirectory")!!)) 10 | } 11 | 12 | tasks.register("nodeVersion") { 13 | dependsOn("installNode") 14 | args.set("--version") 15 | } 16 | 17 | tasks.named("build") { 18 | dependsOn("nodeVersion") 19 | } 20 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/npm-10-subproject/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import org.siouan.frontendgradleplugin.infrastructure.gradle.ResolvePackageManagerTask 2 | import org.siouan.frontendgradleplugin.infrastructure.gradle.RunNpmTaskType 3 | 4 | plugins { 5 | alias(libs.plugins.frontend) 6 | } 7 | 8 | frontend { 9 | nodeDistributionProvided.set(true) 10 | nodeInstallDirectory.set(file(rootProject.ext.get("nodeInstallDirectory")!!)) 11 | } 12 | 13 | tasks.named("resolvePackageManager") { 14 | dependsOn(":node-subproject:installNode") 15 | } 16 | 17 | tasks.register("npm9Version") { 18 | dependsOn("installPackageManager") 19 | args.set("--version") 20 | } 21 | 22 | tasks.named("build") { 23 | dependsOn("npm9Version") 24 | } 25 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/npm-10-subproject/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "packageManager": "npm@10.9.0" 4 | } 5 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/npm-6-subproject/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import org.siouan.frontendgradleplugin.infrastructure.gradle.ResolvePackageManagerTask 2 | import org.siouan.frontendgradleplugin.infrastructure.gradle.RunNpmTaskType 3 | 4 | plugins { 5 | alias(libs.plugins.frontend) 6 | } 7 | 8 | frontend { 9 | nodeDistributionProvided.set(true) 10 | nodeInstallDirectory.set(file(rootProject.ext.get("nodeInstallDirectory")!!)) 11 | } 12 | 13 | tasks.named("resolvePackageManager") { 14 | dependsOn(":node-subproject:installNode") 15 | } 16 | 17 | tasks.register("npm6Version") { 18 | dependsOn("installPackageManager") 19 | args.set("--version") 20 | } 21 | 22 | tasks.named("build") { 23 | dependsOn("npm6Version") 24 | } 25 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/npm-6-subproject/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "packageManager": "npm@6.14.18" 4 | } 5 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/pnpm-6-subproject/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import org.siouan.frontendgradleplugin.infrastructure.gradle.ResolvePackageManagerTask 2 | import org.siouan.frontendgradleplugin.infrastructure.gradle.RunPnpmTaskType 3 | 4 | plugins { 5 | alias(libs.plugins.frontend) 6 | } 7 | 8 | frontend { 9 | nodeDistributionProvided.set(true) 10 | nodeInstallDirectory.set(file(rootProject.ext.get("nodeInstallDirectory")!!)) 11 | } 12 | 13 | tasks.named("resolvePackageManager") { 14 | dependsOn(":node-subproject:installNode") 15 | } 16 | 17 | tasks.register("pnpm6Version") { 18 | dependsOn("installPackageManager") 19 | args.set("--version") 20 | } 21 | 22 | tasks.named("build") { 23 | dependsOn("pnpm6Version") 24 | } 25 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/pnpm-6-subproject/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "packageManager": "pnpm@6.35.1" 4 | } 5 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/pnpm-9-subproject/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import org.siouan.frontendgradleplugin.infrastructure.gradle.ResolvePackageManagerTask 2 | import org.siouan.frontendgradleplugin.infrastructure.gradle.RunPnpmTaskType 3 | 4 | plugins { 5 | alias(libs.plugins.frontend) 6 | } 7 | 8 | frontend { 9 | nodeDistributionProvided.set(true) 10 | nodeInstallDirectory.set(file(rootProject.ext.get("nodeInstallDirectory")!!)) 11 | } 12 | 13 | tasks.named("resolvePackageManager") { 14 | dependsOn(":node-subproject:installNode") 15 | } 16 | 17 | tasks.register("pnpm8Version") { 18 | dependsOn("installPackageManager") 19 | args.set("--version") 20 | } 21 | 22 | tasks.named("build") { 23 | dependsOn("pnpm8Version") 24 | } 25 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/pnpm-9-subproject/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "packageManager": "pnpm@9.12.3" 4 | } 5 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | include("node-subproject", "npm-6-subproject", "npm-10-subproject", "pnpm-6-subproject", "pnpm-9-subproject", "yarn-1-subproject", "yarn-4-subproject") 2 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/yarn-1-subproject/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import org.siouan.frontendgradleplugin.infrastructure.gradle.ResolvePackageManagerTask 2 | import org.siouan.frontendgradleplugin.infrastructure.gradle.RunYarnTaskType 3 | 4 | plugins { 5 | alias(libs.plugins.frontend) 6 | } 7 | 8 | frontend { 9 | nodeDistributionProvided.set(true) 10 | nodeInstallDirectory.set(file(rootProject.ext.get("nodeInstallDirectory")!!)) 11 | } 12 | 13 | tasks.named("resolvePackageManager") { 14 | dependsOn(":node-subproject:installNode") 15 | } 16 | 17 | tasks.register("yarn1Version") { 18 | dependsOn("installPackageManager") 19 | args.set("--version") 20 | } 21 | 22 | tasks.named("build") { 23 | dependsOn("yarn1Version") 24 | } 25 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/yarn-1-subproject/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "packageManager": "yarn@1.22.22" 4 | } 5 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/yarn-4-subproject/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import org.siouan.frontendgradleplugin.infrastructure.gradle.RunYarnTaskType 2 | 3 | plugins { 4 | alias(libs.plugins.frontend) 5 | } 6 | 7 | frontend { 8 | nodeDistributionProvided.set(true) 9 | nodeInstallDirectory.set(file(rootProject.ext.get("nodeInstallDirectory")!!)) 10 | } 11 | 12 | tasks.named("resolvePackageManager") { 13 | dependsOn(":node-subproject:installNode") 14 | } 15 | 16 | tasks.register("yarn3Version") { 17 | dependsOn("installPackageManager") 18 | args.set("--version") 19 | } 20 | 21 | tasks.named("build") { 22 | dependsOn("yarn3Version") 23 | } 24 | -------------------------------------------------------------------------------- /examples/multiple-package-managers-with-shared-nodejs-distribution/yarn-4-subproject/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "packageManager": "yarn@4.5.1" 4 | } 5 | -------------------------------------------------------------------------------- /examples/npm-application/README.md: -------------------------------------------------------------------------------- 1 | ## Example: build a npm application 2 | 3 | This example demonstrates how to configure a Gradle project to install a [Node.js][nodejs] distribution, and build a 4 | Javascript application with [npm][npm]. 5 | 6 | ### Requirements 7 | 8 | - A [Gradle Wrapper][gradle-wrapper] configured in this directory. 9 | 10 | ### Description 11 | 12 | - [`settings.gradle.kts`](settings.gradle.kts): defines version of used plugins. 13 | - [`build.gradle.kts`](build.gradle.kts): applies and configure this plugin. 14 | - [`package.json`](package.json): scripts connected to Gradle lifecycle tasks `clean`, `assemble`, `check`. 15 | 16 | [gradle-wrapper]: (Gradle Wrapper) 17 | [nodejs]: (Node.js) 18 | [npm]: (npm) 19 | -------------------------------------------------------------------------------- /examples/npm-application/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "packageManager": "npm@10.9.0", 4 | "scripts": { 5 | "build": "echo Building frontend", 6 | "check": "echo Checking frontend && npm run lint && npm run test", 7 | "lint": "echo Linting frontend", 8 | "test": "echo Testing frontend" 9 | } 10 | } 11 | 12 | -------------------------------------------------------------------------------- /examples/pnpm-application/README.md: -------------------------------------------------------------------------------- 1 | ## Example: build a pnpm application 2 | 3 | This example demonstrates how to configure a Gradle project to install a [Node.js][nodejs] distribution, and build a 4 | Javascript application with [pnpm][pnpm]. 5 | 6 | ### Requirements 7 | 8 | - A [Gradle Wrapper][gradle-wrapper] configured in this directory. 9 | 10 | ### Description 11 | 12 | - [`settings.gradle.kts`](settings.gradle.kts): defines version of used plugins. 13 | - [`build.gradle.kts`](build.gradle.kts): applies and configure this plugin. 14 | - [`package.json`](package.json): scripts connected to Gradle lifecycle tasks `clean`, `assemble`, `check`. 15 | 16 | [gradle-wrapper]: (Gradle Wrapper) 17 | [nodejs]: (Node.js) 18 | [pnpm]: (pnpm) 19 | -------------------------------------------------------------------------------- /examples/pnpm-application/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "packageManager": "pnpm@9.12.3", 4 | "scripts": { 5 | "build": "echo Building frontend", 6 | "check": "echo Checking frontend && pnpm run lint && pnpm run test", 7 | "lint": "echo Linting frontend", 8 | "test": "echo Testing frontend" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /examples/yarn-application-with-node-modules-linker/.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | -------------------------------------------------------------------------------- /examples/yarn-application-with-node-modules-linker/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "packageManager": "yarn@4.5.1", 4 | "scripts": { 5 | "build": "echo Building frontend", 6 | "check": "echo Checking frontend && yarn run lint && yarn run test", 7 | "lint": "echo Linting frontend", 8 | "test": "echo Testing frontend" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /examples/yarn-application-with-pnp-linker/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "packageManager": "yarn@4.5.1", 4 | "scripts": { 5 | "build": "echo Building frontend", 6 | "check": "echo Checking frontend && yarn run lint && yarn run test", 7 | "lint": "echo Linting frontend", 8 | "test": "echo Testing frontend" 9 | }, 10 | "optionalDependencies": { 11 | "corepack": "0.29.4" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /plugins/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import org.siouan.frontendgradleplugin.GradleTestListener 2 | 3 | gradle.addListener(GradleTestListener(logger)) 4 | -------------------------------------------------------------------------------- /plugins/buildSrc/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("java-gradle-plugin") 3 | } 4 | 5 | dependencies { 6 | implementation(gradleApi()) 7 | } 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/gradle.properties: -------------------------------------------------------------------------------- 1 | fgpJdkVersion=11 2 | fgpGroup=org.siouan 3 | fgpVersion=10.0.0 4 | fgpDisplayName=Frontend Gradle plugin 5 | fgpDescription=Build Javascript applications with Node, NPM, PNPM, Yarn: distribution management and package manager activation (Corepack), built-in tasks, additional task types. 6 | fgpImplementationClass=org.siouan.frontendgradleplugin.FrontendGradlePlugin 7 | fgpWebsiteUrl=https://siouan.github.io/frontend-gradle-plugin/ 8 | fgpVcsUrl=https://github.com/siouan/frontend-gradle-plugin.git 9 | fgpGradlePluginPortalTags=corepack,frontend,node,nodejs,npm,pnpm,yarn 10 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/java/org/siouan/frontendgradleplugin/test/PluginTaskOutcome.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.test; 2 | 3 | import org.gradle.testkit.runner.TaskOutcome; 4 | 5 | /** 6 | * Enumeration of task outcomes for utilities in {@link GradleBuildAssertions} class. 7 | * 8 | * @since 7.0.0 9 | */ 10 | public enum PluginTaskOutcome { 11 | FAILED(TaskOutcome.FAILED), 12 | IGNORED(null), 13 | SKIPPED(TaskOutcome.SKIPPED), 14 | SUCCESS(TaskOutcome.SUCCESS), 15 | UP_TO_DATE(TaskOutcome.UP_TO_DATE); 16 | 17 | private final TaskOutcome nativeOutcome; 18 | 19 | PluginTaskOutcome(final TaskOutcome nativeOutcome) { 20 | this.nativeOutcome = nativeOutcome; 21 | } 22 | 23 | public TaskOutcome getNativeOutcome() { 24 | return nativeOutcome; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/SHASUMS256.txt: -------------------------------------------------------------------------------- 1 | 8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 node-v10.15.1.txt 2 | c5b1eab3577b2b060caeedfb041098c9febddd6168164ace02845e6151710f30 node-v22.11.0.zip 3 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/bin/corepack: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/bin/node: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo "$0 $*" 4 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/bin/npm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/bin/npx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/bin/pnpm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/bin/pnpx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/bin/yarn: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/corepack.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/node.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/node.exe -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/npm.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/npx.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/pnpm.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/pnpx.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-provided/yarn.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-without-node/bin/corepack: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-without-node/bin/npm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-without-node/bin/npx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-without-node/bin/pnpm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-without-node/bin/pnpx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-without-node/bin/yarn: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-without-node/corepack.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-without-node/npm.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-without-node/npx.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-without-node/pnpm.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-without-node/pnpx.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-dist-without-node/yarn.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/node-v22.11.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk11/src/integrationTest/resources/node-v22.11.0.zip -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/package-any-manager.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-package-manager-resolution-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test package manager resolution", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "npm@10.9.0" 8 | } 9 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/package-invalid-manager.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-package-manager-resolution-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test package manager resolution", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "invalid-manager" 8 | } 9 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/package-no-manager.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-package-manager-resolution-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test package manager resolution", 5 | "private": true, 6 | "license": "UNLICENSED" 7 | } 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/package-npm.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-npm-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test frontend scripts integration in a Gradle build with npm", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "npm@10.9.0", 8 | "cacheDirectories": [ 9 | "node_modules" 10 | ], 11 | "scripts": { 12 | "another-script": "node -v && npm -v && echo 'Another frontend script executed' && npm run check", 13 | "assemble": "echo 'Frontend assembled'", 14 | "check": "npm run lint && npm run test", 15 | "lint": "echo 'Frontend linted'", 16 | "publish": "echo 'Frontend published'", 17 | "start": "echo 'Frontend started and stopped'", 18 | "test": "echo 'Frontend tested'" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/package-pnpm.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-pnpm-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test frontend scripts integration in a Gradle build with pnpm", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "pnpm@9.12.3", 8 | "cacheDirectories": [ 9 | "node_modules" 10 | ], 11 | "scripts": { 12 | "another-script": "node -v && pnpm -v && echo 'Another frontend script executed' && pnpm run check", 13 | "assemble": "echo 'Frontend assembled'", 14 | "check": "pnpm run lint && pnpm run test", 15 | "lint": "echo 'Frontend linted'", 16 | "publish": "echo 'Frontend published'", 17 | "start": "echo 'Frontend started and stopped'", 18 | "test": "echo 'Frontend tested'" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/integrationTest/resources/package-yarn.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-npm-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test frontend scripts integration in a Gradle build with npm", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "yarn@4.5.1", 8 | "cacheDirectories": [ 9 | "node_modules" 10 | ], 11 | "scripts": { 12 | "another-script": "node -v && yarn -v && echo 'Another frontend script executed' && yarn run check", 13 | "assemble": "echo 'Frontend assembled'", 14 | "check": "yarn run lint && yarn run test", 15 | "lint": "echo 'Frontend linted'", 16 | "publish": "echo 'Frontend published'", 17 | "start": "echo 'Frontend started and stopped'", 18 | "test": "echo 'Frontend tested'" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/ExecutableType.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Types of executable supported by the plugin. 5 | * 6 | * @since 1.2.0 7 | */ 8 | public enum ExecutableType { 9 | 10 | COREPACK, 11 | NODE, 12 | NPM, 13 | PNPM, 14 | YARN 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/FrontendException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Base class for checked exceptions thrown by the plugin. 5 | */ 6 | public abstract class FrontendException extends Exception { 7 | 8 | protected FrontendException(final String message) { 9 | super(message); 10 | } 11 | 12 | protected FrontendException(final Throwable throwable) { 13 | super(throwable); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/InvalidJsonFileException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | import java.nio.file.Path; 4 | 5 | /** 6 | * Exception thrown when a JSON file does not contain valid JSON. 7 | * 8 | * @since 7.0.0 9 | */ 10 | public class InvalidJsonFileException extends FrontendException { 11 | 12 | public InvalidJsonFileException(final Path jsonFilePath) { 13 | super("Invalid JSON file: " + jsonFilePath); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/MalformedPackageManagerSpecification.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Exception thrown when a package manager specification does not match format {@code @}. 5 | * 6 | * @since 7.0.0 7 | */ 8 | public class MalformedPackageManagerSpecification extends FrontendException { 9 | 10 | public MalformedPackageManagerSpecification(final String packageManagerSpecification) { 11 | super("Malformed package manager specification: '" + packageManagerSpecification + '\''); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/PackageManager.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | import lombok.Builder; 4 | import lombok.Getter; 5 | 6 | /** 7 | * Model class providing the content of the 8 | * packageManager property located in a 9 | * {@code package.json} file. 10 | * 11 | * @since 7.0.0 12 | */ 13 | @Builder 14 | @Getter 15 | public class PackageManager { 16 | 17 | private final PackageManagerType type; 18 | 19 | private final String version; 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/ResolveExecutablePathCommand.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | import java.nio.file.Path; 4 | 5 | import lombok.Builder; 6 | import lombok.EqualsAndHashCode; 7 | import lombok.Getter; 8 | 9 | /** 10 | * Command providing parameters to get the path to an executable. 11 | * 12 | * @since 7.0.0 13 | */ 14 | @Builder 15 | @Getter 16 | @EqualsAndHashCode(onlyExplicitlyIncluded = true) 17 | public class ResolveExecutablePathCommand { 18 | 19 | /** 20 | * Path to the Node.js install directory. 21 | */ 22 | @EqualsAndHashCode.Include 23 | private final Path nodeInstallDirectoryPath; 24 | 25 | /** 26 | * Underlying platform. 27 | */ 28 | @EqualsAndHashCode.Include 29 | private final Platform platform; 30 | } 31 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/UnsupportedPackageManagerException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Exception thrown when a package manager specification ({@code @}) refers to an unsupported package 5 | * manager. 6 | * 7 | * @since 7.0.0 8 | */ 9 | public class UnsupportedPackageManagerException extends FrontendException { 10 | 11 | public UnsupportedPackageManagerException(final String packageManagerName) { 12 | super("Unsupported package manager: '" + packageManagerName + '\''); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/UnsupportedPlatformException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Exception thrown when the underlying platform is not supported by the plugin. 5 | * 6 | * @since 2.0.0 7 | */ 8 | public class UnsupportedPlatformException extends FrontendException { 9 | 10 | public UnsupportedPlatformException(final Platform platform) { 11 | super("This platform is not supported yet: " + platform); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/BuildTemporaryFileName.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | /** 4 | * Generates a temporary file name. 5 | * 6 | * @since 4.0.1 7 | */ 8 | public class BuildTemporaryFileName { 9 | 10 | public static final String TMP_EXTENSION = ".tmp"; 11 | 12 | /** 13 | * Generates a temporary file name based on the given name. 14 | * 15 | * @param fileName Regular file name. 16 | * @return Temporary file name. 17 | */ 18 | public String execute(final String fileName) { 19 | return fileName + TMP_EXTENSION; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/Credentials.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import lombok.Builder; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.Getter; 6 | 7 | /** 8 | * Simple credentials based on a username/password tuple. 9 | * 10 | * @since 3.0.0 11 | */ 12 | @Builder 13 | @Getter 14 | @EqualsAndHashCode(onlyExplicitlyIncluded = true) 15 | public class Credentials { 16 | 17 | @EqualsAndHashCode.Include 18 | private final String username; 19 | 20 | @EqualsAndHashCode.Include 21 | private final String password; 22 | } 23 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/HttpClientProvider.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | /** 4 | * Provider of HTTP clients. 5 | * 6 | * @since 4.0.1 7 | */ 8 | public interface HttpClientProvider { 9 | 10 | /** 11 | * Gets an HTTP client. 12 | * 13 | * @return HTTP client. 14 | */ 15 | HttpClient getInstance(); 16 | } 17 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/InvalidDistributionUrlException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.net.URL; 4 | 5 | import org.siouan.frontendgradleplugin.domain.FrontendException; 6 | 7 | /** 8 | * Exception thrown when the URL to download a distribution is not valid: the URL must contain a non-empty path part 9 | * (e.g. can not be {@code https:///} or {@code https:///directory/}). It can not end with a trailing 10 | * slash '/' character. 11 | * 12 | * @since 2.0.0 13 | */ 14 | public class InvalidDistributionUrlException extends FrontendException { 15 | 16 | public InvalidDistributionUrlException(final URL distributionUrl) { 17 | super("Distribution URL must have a path with a non-empty trailing file name: '" + distributionUrl + '\''); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/InvalidNodeDistributionException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Exception thrown when a downloaded Node distribution is corrupted. 7 | * 8 | * @since 2.0.0 9 | */ 10 | public class InvalidNodeDistributionException extends FrontendException { 11 | 12 | public InvalidNodeDistributionException() { 13 | super("Distribution file corrupted: invalid shasum"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/NodeDistributionShasumNotFoundException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Exception thrown when the shasum of a Node distribution could not be found in the file providing shasums for all 7 | * packages of a given release. 8 | */ 9 | public class NodeDistributionShasumNotFoundException extends FrontendException { 10 | 11 | public NodeDistributionShasumNotFoundException(final String distributionFileName) { 12 | super("Distribution shasum not found: '" + distributionFileName + '\''); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/ResourceDownloadException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Exception thrown when a resource download definitely failed despite eventual multiple attempts. 7 | * 8 | * @since 4.0.1 9 | */ 10 | public class ResourceDownloadException extends FrontendException { 11 | 12 | public ResourceDownloadException(final String message) { 13 | super(message); 14 | } 15 | 16 | public ResourceDownloadException(final Throwable e) { 17 | super(e); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/RetryableResourceDownloadException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.io.IOException; 4 | 5 | /** 6 | * Exception used to notify an attempt to download a resource failed for a reason that may trigger a retry. 7 | * 8 | * @since 7.1.0. 9 | */ 10 | class RetryableResourceDownloadException extends ResourceDownloadException { 11 | 12 | public RetryableResourceDownloadException(final String message) { 13 | super(message); 14 | } 15 | 16 | /** 17 | * Wraps an I/O error, generally a connectivity issue. 18 | * 19 | * @param e I/O error. 20 | */ 21 | public RetryableResourceDownloadException(final IOException e) { 22 | super(e); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/UnsupportedDistributionArchiveException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.nio.file.Path; 4 | 5 | import org.siouan.frontendgradleplugin.domain.FrontendException; 6 | 7 | /** 8 | * Exception thrown when the type of a downloaded distribution archive is not supported. 9 | */ 10 | public class UnsupportedDistributionArchiveException extends FrontendException { 11 | 12 | public UnsupportedDistributionArchiveException(final Path distributionFilePath) { 13 | super("Unsupported type of distribution: " + distributionFilePath); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/Archiver.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import java.io.IOException; 4 | 5 | /** 6 | * Interface of a component capable to process archives. 7 | * 8 | * @since 1.1.3 9 | */ 10 | public interface Archiver { 11 | 12 | /** 13 | * Explodes an archive using the given settings. 14 | * 15 | * @param command Parameters to explode archive content. 16 | * @throws ArchiverException If extraction fails. 17 | * @throws IOException If an I/O error occurs. 18 | */ 19 | void explode(ExplodeCommand command) throws ArchiverException, IOException; 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/ArchiverContext.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import java.io.IOException; 4 | 5 | /** 6 | * Interface of a context used internally by an archiver to provide information during entries extraction. 7 | * 8 | * @since 1.1.3 9 | */ 10 | public interface ArchiverContext extends AutoCloseable { 11 | 12 | /** 13 | * Gets the parameters to explode archive content. 14 | * 15 | * @return Settings. 16 | */ 17 | ExplodeCommand getExplodeCommand(); 18 | 19 | /** 20 | * Closes this context. If this context is already closed, calling this method has no effect. 21 | */ 22 | @Override 23 | void close() throws IOException; 24 | } 25 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/ArchiverException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Base class for exceptions thrown by an archiver when it detects an error. 7 | * 8 | * @since 1.1.3 9 | */ 10 | public abstract class ArchiverException extends FrontendException { 11 | 12 | /** 13 | * Builds an exception with the given message. 14 | * 15 | * @param message Message. 16 | */ 17 | protected ArchiverException(final String message) { 18 | super(message); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/ArchiverProvider.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import java.nio.file.Path; 4 | import java.util.Optional; 5 | 6 | /** 7 | * Provider of archivers. 8 | * 9 | * @since 2.0.0 10 | */ 11 | public interface ArchiverProvider { 12 | 13 | /** 14 | * Gets an archiver capable to process the given archive file. 15 | * 16 | * @param archiveFilePath Path to the archive file. 17 | * @return Archiver. 18 | */ 19 | Optional findByArchiveFilePath(Path archiveFilePath); 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/DirectoryNotFoundException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import java.nio.file.Path; 4 | 5 | /** 6 | * Exception thrown by an archiver when the directory where the archive shall be exploded does not exist. 7 | * 8 | * @since 1.1.3 9 | */ 10 | public class DirectoryNotFoundException extends ArchiverException { 11 | 12 | /** 13 | * Builds an exception with the given path. 14 | * 15 | * @param directoryPath Path to the directory. 16 | */ 17 | public DirectoryNotFoundException(final Path directoryPath) { 18 | super("Target path is not a directory: " + directoryPath); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/UnsupportedEntryException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | /** 4 | * Exception thrown when an archive contains an entry that cannot be extracted by an archiver, because it is neither a 5 | * directory, nor a file, nor a symbolic link. 6 | * 7 | * @since 1.1.3 8 | */ 9 | public class UnsupportedEntryException extends ArchiverException { 10 | 11 | /** 12 | * Builds an exception for the given entry. 13 | * 14 | * @param entryName Entry name. 15 | */ 16 | public UnsupportedEntryException(final String entryName) { 17 | super("Unsupported entry: " + entryName); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/domain/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Contains business logic of the plugin: downloading and installing a Node.js distribution, and resolve execution 3 | * settings to run a script with Node.js-based executables. 4 | * 5 | * @since 2.0.0 6 | */ 7 | package org.siouan.frontendgradleplugin.domain; 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/infrastructure/archiver/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides archiver implementations. 3 | * 4 | * @since 2.0.0 5 | */ 6 | package org.siouan.frontendgradleplugin.infrastructure.archiver; 7 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/BeanInstanciationException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.bean; 2 | 3 | /** 4 | * Exception thrown when a bean instanciation fails. 5 | * 6 | * @since 2.0.0 7 | */ 8 | public class BeanInstanciationException extends BeanRegistryException { 9 | 10 | BeanInstanciationException(final Class beanClass, final Throwable cause) { 11 | super(beanClass, "Cannot create instance of bean '" + beanClass.getName() + '\'', cause); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/BeanRegistryException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.bean; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * Base class of exceptions thrown by the bean registry. 7 | * 8 | * @since 2.0.0 9 | */ 10 | @Getter 11 | public abstract class BeanRegistryException extends Exception { 12 | 13 | private final Class beanClass; 14 | 15 | protected BeanRegistryException(final Class beanClass, final String message) { 16 | this(beanClass, message, null); 17 | } 18 | 19 | protected BeanRegistryException(final Class beanClass, final String message, final Throwable cause) { 20 | super(message, cause); 21 | this.beanClass = beanClass; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/TooManyCandidateBeansException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.bean; 2 | 3 | import static java.util.stream.Collectors.toSet; 4 | 5 | import java.util.Arrays; 6 | 7 | /** 8 | * Exception thrown when multiple beans in the registry are valid candidates for a type of constructor parameter. 9 | * 10 | * @since 2.0.0 11 | */ 12 | public class TooManyCandidateBeansException extends BeanRegistryException { 13 | 14 | TooManyCandidateBeansException(final Class beanClass, final Object... beans) { 15 | super(beanClass, "Multiple beans were found for type '" + beanClass + "': " + String.join(", ", 16 | Arrays.stream(beans).map(Object::getClass).map(Class::getName).collect(toSet()))); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/ZeroOrMultiplePublicConstructorsException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.bean; 2 | 3 | /** 4 | * Exception thrown when a bean has zero or multiple public constructors. Such bean can not be instanciated because the 5 | * registry does not know how to select the relevant constructor. 6 | * 7 | * @since 2.0.0 8 | */ 9 | public class ZeroOrMultiplePublicConstructorsException extends BeanRegistryException { 10 | 11 | ZeroOrMultiplePublicConstructorsException(final Class beanClass) { 12 | super(beanClass, "Class '" + beanClass.getName() + "' must declare a single public constructor."); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides infrastructure core classes: inversion of control, logging 3 | * 4 | * @since 2.0.0 5 | */ 6 | package org.siouan.frontendgradleplugin.infrastructure.bean; 7 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/AssembleTask.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 2 | 3 | import javax.inject.Inject; 4 | 5 | import org.gradle.api.model.ObjectFactory; 6 | import org.gradle.api.provider.Property; 7 | import org.gradle.api.tasks.Input; 8 | import org.gradle.api.tasks.Optional; 9 | import org.gradle.process.ExecOperations; 10 | 11 | /** 12 | * This task assembles project artifacts. 13 | */ 14 | public class AssembleTask extends AbstractRunCommandTask { 15 | 16 | @Inject 17 | public AssembleTask(final ObjectFactory objectFactory, final ExecOperations execOperations) { 18 | super(objectFactory, execOperations); 19 | } 20 | 21 | @Input 22 | @Optional 23 | public Property getAssembleScript() { 24 | return executableArgs; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/CheckTask.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 2 | 3 | import javax.inject.Inject; 4 | 5 | import org.gradle.api.model.ObjectFactory; 6 | import org.gradle.api.provider.Property; 7 | import org.gradle.api.tasks.Input; 8 | import org.gradle.api.tasks.Optional; 9 | import org.gradle.process.ExecOperations; 10 | 11 | /** 12 | * This task checks the project. 13 | */ 14 | public class CheckTask extends AbstractRunCommandTask { 15 | 16 | @Inject 17 | public CheckTask(final ObjectFactory objectFactory, final ExecOperations execOperations) { 18 | super(objectFactory, execOperations); 19 | } 20 | 21 | @Input 22 | @Optional 23 | public Property getCheckScript() { 24 | return executableArgs; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/NonRunnableTaskException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Exception thrown when a task is not runnable. 7 | * 8 | * @since 6.0.0 9 | */ 10 | public class NonRunnableTaskException extends FrontendException { 11 | 12 | public NonRunnableTaskException(final String message) { 13 | super(message); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/PublishTask.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 2 | 3 | import javax.inject.Inject; 4 | 5 | import org.gradle.api.model.ObjectFactory; 6 | import org.gradle.api.provider.Property; 7 | import org.gradle.api.tasks.Input; 8 | import org.gradle.api.tasks.Optional; 9 | import org.gradle.process.ExecOperations; 10 | 11 | /** 12 | * This task publishes project artifacts. 13 | */ 14 | public class PublishTask extends AbstractRunCommandTask { 15 | 16 | @Inject 17 | public PublishTask(final ObjectFactory objectFactory, final ExecOperations execOperations) { 18 | super(objectFactory, execOperations); 19 | } 20 | 21 | @Input 22 | @Optional 23 | public Property getPublishScript() { 24 | return executableArgs; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides the plugin's tasks. 3 | */ 4 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 5 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/infrastructure/httpclient/HttpClientProviderImpl.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.httpclient; 2 | 3 | import java.io.Serializable; 4 | 5 | import org.siouan.frontendgradleplugin.domain.installer.HttpClient; 6 | import org.siouan.frontendgradleplugin.domain.installer.HttpClientProvider; 7 | 8 | /** 9 | * A provider returning a HTTP client based on the low-level Apache HTTP client. 10 | * 11 | * @since 4.0.1 12 | */ 13 | public class HttpClientProviderImpl implements HttpClientProvider, Serializable { 14 | 15 | private static final HttpClient INSTANCE = new ApacheHttpClient(); 16 | 17 | private static final long serialVersionUID = -5442300705570408127L; 18 | 19 | @Override 20 | public HttpClient getInstance() { 21 | return INSTANCE; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/infrastructure/system/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides implementations of domain provider interfaces. 3 | * 4 | * @since 2.0.0 5 | */ 6 | package org.siouan.frontendgradleplugin.infrastructure.system; 7 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/main/java/org/siouan/frontendgradleplugin/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides the plugin bootstrap class. 3 | */ 4 | package org.siouan.frontendgradleplugin; 5 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/test/java/org/siouan/frontendgradleplugin/domain/PackageManagerFixture.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.NoArgsConstructor; 5 | 6 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 7 | public final class PackageManagerFixture { 8 | 9 | public static PackageManager aPackageManager() { 10 | return PackageManager.builder().type(PackageManagerType.NPM).version("9.7.1").build(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/test/java/org/siouan/frontendgradleplugin/domain/installer/BuildTemporaryFileNameTest.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import static org.assertj.core.api.Assertions.assertThat; 4 | 5 | import org.junit.jupiter.api.Test; 6 | import org.junit.jupiter.api.extension.ExtendWith; 7 | import org.mockito.InjectMocks; 8 | import org.mockito.junit.jupiter.MockitoExtension; 9 | 10 | @ExtendWith(MockitoExtension.class) 11 | class BuildTemporaryFileNameTest { 12 | 13 | @InjectMocks 14 | private BuildTemporaryFileName usecase; 15 | 16 | @Test 17 | void should_return_temporary_fileName() { 18 | assertThat(usecase.execute("/home/user/file.tar.gz")).isEqualTo("/home/user/file.tar.gz.tmp"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/test/java/org/siouan/frontendgradleplugin/domain/installer/CredentialsFixture.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.NoArgsConstructor; 5 | 6 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 7 | public final class CredentialsFixture { 8 | 9 | public static Credentials someCredentials() { 10 | return someCredentials("goezkgir1fei3"); 11 | } 12 | 13 | public static Credentials someCredentials(final String username) { 14 | return Credentials.builder().username(username).password("ger#~76'ger").build(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/test/java/org/siouan/frontendgradleplugin/domain/installer/ProxySettingsFixture.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.net.Proxy; 4 | 5 | import lombok.AccessLevel; 6 | import lombok.NoArgsConstructor; 7 | 8 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 9 | public final class ProxySettingsFixture { 10 | 11 | public static ProxySettings direct() { 12 | return ProxySettings.builder().proxyType(Proxy.Type.DIRECT).build(); 13 | } 14 | 15 | public static ProxySettings someProxySettings() { 16 | return ProxySettings 17 | .builder() 18 | .proxyType(Proxy.Type.HTTP) 19 | .proxyHost("example.com") 20 | .proxyPort(443) 21 | .credentials(null) 22 | .build(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/test/java/org/siouan/frontendgradleplugin/domain/installer/archiver/ArchiveEntryType.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | /** 4 | * Internal type of an entry. 5 | */ 6 | enum ArchiveEntryType { 7 | 8 | SYMBOLIC_LINK, 9 | DIRECTORY, 10 | FILE, 11 | UNKNOWN 12 | } 13 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/test/java/org/siouan/frontendgradleplugin/test/PathFixture.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.test; 2 | 3 | import java.nio.file.Path; 4 | import java.nio.file.Paths; 5 | 6 | import lombok.AccessLevel; 7 | import lombok.NoArgsConstructor; 8 | 9 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 10 | public final class PathFixture { 11 | 12 | public static final Path ANY_PATH = Paths.get("/frontend-gradle-plugin/any-path"); 13 | 14 | public static final Path TMP_PATH = ANY_PATH.resolve("tmp"); 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/test/java/org/siouan/frontendgradleplugin/test/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides utilities for automated tests. 3 | */ 4 | package org.siouan.frontendgradleplugin.test; 5 | -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/test/resources/archive-linux.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk11/src/test/resources/archive-linux.zip -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/test/resources/archive-win.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk11/src/test/resources/archive-win.zip -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/test/resources/archive.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk11/src/test/resources/archive.tar.gz -------------------------------------------------------------------------------- /plugins/frontend-jdk11/src/test/resources/invalid-archive.unknown: -------------------------------------------------------------------------------- 1 | 1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901- -------------------------------------------------------------------------------- /plugins/frontend-jdk17/gradle.properties: -------------------------------------------------------------------------------- 1 | fgpJdkVersion=17 2 | fgpGroup=org.siouan 3 | fgpVersion=10.0.0 4 | fgpDisplayName=Frontend Gradle plugin 5 | fgpDescription=Build Javascript applications with Node, NPM, PNPM, Yarn: distribution management and package manager activation (Corepack), built-in tasks, additional task types. 6 | fgpImplementationClass=org.siouan.frontendgradleplugin.FrontendGradlePlugin 7 | fgpWebsiteUrl=https://siouan.github.io/frontend-gradle-plugin/ 8 | fgpVcsUrl=https://github.com/siouan/frontend-gradle-plugin.git 9 | fgpGradlePluginPortalTags=corepack,frontend,node,nodejs,npm,pnpm,yarn 10 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/java/org/siouan/frontendgradleplugin/test/PluginTaskOutcome.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.test; 2 | 3 | import org.gradle.testkit.runner.TaskOutcome; 4 | 5 | /** 6 | * Enumeration of task outcomes for utilities in {@link GradleBuildAssertions} class. 7 | * 8 | * @since 7.0.0 9 | */ 10 | public enum PluginTaskOutcome { 11 | FAILED(TaskOutcome.FAILED), 12 | IGNORED(null), 13 | SKIPPED(TaskOutcome.SKIPPED), 14 | SUCCESS(TaskOutcome.SUCCESS), 15 | UP_TO_DATE(TaskOutcome.UP_TO_DATE); 16 | 17 | private final TaskOutcome nativeOutcome; 18 | 19 | PluginTaskOutcome(final TaskOutcome nativeOutcome) { 20 | this.nativeOutcome = nativeOutcome; 21 | } 22 | 23 | public TaskOutcome getNativeOutcome() { 24 | return nativeOutcome; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/SHASUMS256.txt: -------------------------------------------------------------------------------- 1 | 8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 node-v10.15.1.txt 2 | c5b1eab3577b2b060caeedfb041098c9febddd6168164ace02845e6151710f30 node-v22.11.0.zip 3 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/bin/corepack: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/bin/node: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo "$0 $*" 4 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/bin/npm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/bin/npx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/bin/pnpm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/bin/pnpx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/bin/yarn: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/corepack.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/node.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/node.exe -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/npm.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/npx.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/pnpm.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/pnpx.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-provided/yarn.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-without-node/bin/corepack: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-without-node/bin/npm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-without-node/bin/npx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-without-node/bin/pnpm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-without-node/bin/pnpx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-without-node/bin/yarn: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-without-node/corepack.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-without-node/npm.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-without-node/npx.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-without-node/pnpm.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-without-node/pnpx.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-dist-without-node/yarn.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/node-v22.11.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk17/src/integrationTest/resources/node-v22.11.0.zip -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/package-any-manager.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-package-manager-resolution-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test package manager resolution", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "npm@10.9.0" 8 | } 9 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/package-invalid-manager.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-package-manager-resolution-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test package manager resolution", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "invalid-manager" 8 | } 9 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/package-no-manager.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-package-manager-resolution-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test package manager resolution", 5 | "private": true, 6 | "license": "UNLICENSED" 7 | } 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/package-npm.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-npm-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test frontend scripts integration in a Gradle build with npm", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "npm@10.9.0", 8 | "cacheDirectories": [ 9 | "node_modules" 10 | ], 11 | "scripts": { 12 | "another-script": "node -v && npm -v && echo 'Another frontend script executed' && npm run check", 13 | "assemble": "echo 'Frontend assembled'", 14 | "check": "npm run lint && npm run test", 15 | "lint": "echo 'Frontend linted'", 16 | "publish": "echo 'Frontend published'", 17 | "start": "echo 'Frontend started and stopped'", 18 | "test": "echo 'Frontend tested'" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/package-pnpm.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-pnpm-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test frontend scripts integration in a Gradle build with pnpm", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "pnpm@9.12.3", 8 | "cacheDirectories": [ 9 | "node_modules" 10 | ], 11 | "scripts": { 12 | "another-script": "node -v && pnpm -v && echo 'Another frontend script executed' && pnpm run check", 13 | "assemble": "echo 'Frontend assembled'", 14 | "check": "pnpm run lint && pnpm run test", 15 | "lint": "echo 'Frontend linted'", 16 | "publish": "echo 'Frontend published'", 17 | "start": "echo 'Frontend started and stopped'", 18 | "test": "echo 'Frontend tested'" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/integrationTest/resources/package-yarn.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-npm-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test frontend scripts integration in a Gradle build with npm", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "yarn@4.5.1", 8 | "cacheDirectories": [ 9 | "node_modules" 10 | ], 11 | "scripts": { 12 | "another-script": "node -v && yarn -v && echo 'Another frontend script executed' && yarn run check", 13 | "assemble": "echo 'Frontend assembled'", 14 | "check": "yarn run lint && yarn run test", 15 | "lint": "echo 'Frontend linted'", 16 | "publish": "echo 'Frontend published'", 17 | "start": "echo 'Frontend started and stopped'", 18 | "test": "echo 'Frontend tested'" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/ExecutableType.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Types of executable supported by the plugin. 5 | * 6 | * @since 1.2.0 7 | */ 8 | public enum ExecutableType { 9 | 10 | COREPACK, 11 | NODE, 12 | NPM, 13 | PNPM, 14 | YARN 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/FrontendException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Base class for checked exceptions thrown by the plugin. 5 | */ 6 | public abstract class FrontendException extends Exception { 7 | 8 | protected FrontendException(final String message) { 9 | super(message); 10 | } 11 | 12 | protected FrontendException(final Throwable throwable) { 13 | super(throwable); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/InvalidJsonFileException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | import java.nio.file.Path; 4 | 5 | /** 6 | * Exception thrown when a JSON file does not contain valid JSON. 7 | * 8 | * @since 7.0.0 9 | */ 10 | public class InvalidJsonFileException extends FrontendException { 11 | 12 | public InvalidJsonFileException(final Path jsonFilePath) { 13 | super("Invalid JSON file: " + jsonFilePath); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/MalformedPackageManagerSpecification.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Exception thrown when a package manager specification does not match format {@code @}. 5 | * 6 | * @since 7.0.0 7 | */ 8 | public class MalformedPackageManagerSpecification extends FrontendException { 9 | 10 | public MalformedPackageManagerSpecification(final String packageManagerSpecification) { 11 | super("Malformed package manager specification: '" + packageManagerSpecification + '\''); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/PackageManager.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | import lombok.Builder; 4 | 5 | /** 6 | * Model class providing the content of the 7 | * packageManager property located in a 8 | * {@code package.json} file. 9 | * 10 | * @since 7.0.0 11 | */ 12 | @Builder 13 | public record PackageManager(PackageManagerType type, String version) {} 14 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/ResolveExecutablePathCommand.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | import java.nio.file.Path; 4 | 5 | import lombok.Builder; 6 | import lombok.EqualsAndHashCode; 7 | import lombok.Getter; 8 | 9 | /** 10 | * Command providing parameters to get the path to an executable. 11 | * 12 | * @since 7.0.0 13 | */ 14 | @Builder 15 | @Getter 16 | @EqualsAndHashCode(onlyExplicitlyIncluded = true) 17 | public class ResolveExecutablePathCommand { 18 | 19 | /** 20 | * Path to the Node.js install directory. 21 | */ 22 | @EqualsAndHashCode.Include 23 | private final Path nodeInstallDirectoryPath; 24 | 25 | /** 26 | * Underlying platform. 27 | */ 28 | @EqualsAndHashCode.Include 29 | private final Platform platform; 30 | } 31 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/UnsupportedPackageManagerException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Exception thrown when a package manager specification ({@code @}) refers to an unsupported package 5 | * manager. 6 | * 7 | * @since 7.0.0 8 | */ 9 | public class UnsupportedPackageManagerException extends FrontendException { 10 | 11 | public UnsupportedPackageManagerException(final String packageManagerName) { 12 | super("Unsupported package manager: '" + packageManagerName + '\''); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/UnsupportedPlatformException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Exception thrown when the underlying platform is not supported by the plugin. 5 | * 6 | * @since 2.0.0 7 | */ 8 | public class UnsupportedPlatformException extends FrontendException { 9 | 10 | public UnsupportedPlatformException(final Platform platform) { 11 | super("This platform is not supported yet: " + platform); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/BuildTemporaryFileName.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | /** 4 | * Generates a temporary file name. 5 | * 6 | * @since 4.0.1 7 | */ 8 | public class BuildTemporaryFileName { 9 | 10 | public static final String TMP_EXTENSION = ".tmp"; 11 | 12 | /** 13 | * Generates a temporary file name based on the given name. 14 | * 15 | * @param fileName Regular file name. 16 | * @return Temporary file name. 17 | */ 18 | public String execute(final String fileName) { 19 | return fileName + TMP_EXTENSION; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/Credentials.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import lombok.Builder; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.Getter; 6 | 7 | /** 8 | * Simple credentials based on a username/password tuple. 9 | * 10 | * @since 3.0.0 11 | */ 12 | @Builder 13 | @Getter 14 | @EqualsAndHashCode(onlyExplicitlyIncluded = true) 15 | public class Credentials { 16 | 17 | @EqualsAndHashCode.Include 18 | private final String username; 19 | 20 | @EqualsAndHashCode.Include 21 | private final String password; 22 | } 23 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/HttpClientProvider.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | /** 4 | * Provider of HTTP clients. 5 | * 6 | * @since 4.0.1 7 | */ 8 | public interface HttpClientProvider { 9 | 10 | /** 11 | * Gets an HTTP client. 12 | * 13 | * @return HTTP client. 14 | */ 15 | HttpClient getInstance(); 16 | } 17 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/InvalidDistributionUrlException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.net.URL; 4 | 5 | import org.siouan.frontendgradleplugin.domain.FrontendException; 6 | 7 | /** 8 | * Exception thrown when the URL to download a distribution is not valid: the URL must contain a non-empty path part 9 | * (e.g. can not be {@code https:///} or {@code https:///directory/}). It can not end with a trailing 10 | * slash '/' character. 11 | * 12 | * @since 2.0.0 13 | */ 14 | public class InvalidDistributionUrlException extends FrontendException { 15 | 16 | public InvalidDistributionUrlException(final URL distributionUrl) { 17 | super("Distribution URL must have a path with a non-empty trailing file name: '" + distributionUrl + '\''); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/InvalidNodeDistributionException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Exception thrown when a downloaded Node distribution is corrupted. 7 | * 8 | * @since 2.0.0 9 | */ 10 | public class InvalidNodeDistributionException extends FrontendException { 11 | 12 | public InvalidNodeDistributionException() { 13 | super("Distribution file corrupted: invalid shasum"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/NodeDistributionShasumNotFoundException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Exception thrown when the shasum of a Node distribution could not be found in the file providing shasums for all 7 | * packages of a given release. 8 | */ 9 | public class NodeDistributionShasumNotFoundException extends FrontendException { 10 | 11 | public NodeDistributionShasumNotFoundException(final String distributionFileName) { 12 | super("Distribution shasum not found: '" + distributionFileName + '\''); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/ResolveProxySettingsByUrlCommand.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.net.URL; 4 | import java.util.Set; 5 | 6 | import lombok.Builder; 7 | 8 | /** 9 | * Parameters to resolve proxy settings. 10 | * 11 | * @since 7.0.0 12 | */ 13 | @Builder 14 | public record ResolveProxySettingsByUrlCommand(String httpProxyHost, int httpProxyPort, 15 | Credentials httpProxyCredentials, String httpsProxyHost, int httpsProxyPort, Credentials httpsProxyCredentials, 16 | URL resourceUrl, String systemHttpProxyHost, int systemHttpProxyPort, String systemHttpsProxyHost, 17 | int systemHttpsProxyPort, Set systemNonProxyHosts) {} 18 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/ResourceDownloadException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Exception thrown when a resource download definitely failed despite eventual multiple attempts. 7 | * 8 | * @since 4.0.1 9 | */ 10 | public class ResourceDownloadException extends FrontendException { 11 | 12 | public ResourceDownloadException(final String message) { 13 | super(message); 14 | } 15 | 16 | public ResourceDownloadException(final Throwable e) { 17 | super(e); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/RetryableResourceDownloadException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.io.IOException; 4 | 5 | /** 6 | * Exception used to notify an attempt to download a resource failed for a reason that may trigger a retry. 7 | * 8 | * @since 7.1.0. 9 | */ 10 | class RetryableResourceDownloadException extends ResourceDownloadException { 11 | 12 | public RetryableResourceDownloadException(final String message) { 13 | super(message); 14 | } 15 | 16 | /** 17 | * Wraps an I/O error, generally a connectivity issue. 18 | * 19 | * @param e I/O error. 20 | */ 21 | public RetryableResourceDownloadException(final IOException e) { 22 | super(e); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/UnsupportedDistributionArchiveException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.nio.file.Path; 4 | 5 | import org.siouan.frontendgradleplugin.domain.FrontendException; 6 | 7 | /** 8 | * Exception thrown when the type of a downloaded distribution archive is not supported. 9 | */ 10 | public class UnsupportedDistributionArchiveException extends FrontendException { 11 | 12 | public UnsupportedDistributionArchiveException(final Path distributionFilePath) { 13 | super("Unsupported type of distribution: " + distributionFilePath); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/Archiver.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import java.io.IOException; 4 | 5 | /** 6 | * Interface of a component capable to process archives. 7 | * 8 | * @since 1.1.3 9 | */ 10 | public interface Archiver { 11 | 12 | /** 13 | * Explodes an archive using the given settings. 14 | * 15 | * @param command Parameters to explode archive content. 16 | * @throws ArchiverException If extraction fails. 17 | * @throws IOException If an I/O error occurs. 18 | */ 19 | void explode(ExplodeCommand command) throws ArchiverException, IOException; 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/ArchiverContext.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import java.io.IOException; 4 | 5 | /** 6 | * Interface of a context used internally by an archiver to provide information during entries extraction. 7 | * 8 | * @since 1.1.3 9 | */ 10 | public interface ArchiverContext extends AutoCloseable { 11 | 12 | /** 13 | * Gets the parameters to explode archive content. 14 | * 15 | * @return Settings. 16 | */ 17 | ExplodeCommand getExplodeCommand(); 18 | 19 | /** 20 | * Closes this context. If this context is already closed, calling this method has no effect. 21 | */ 22 | @Override 23 | void close() throws IOException; 24 | } 25 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/ArchiverException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Base class for exceptions thrown by an archiver when it detects an error. 7 | * 8 | * @since 1.1.3 9 | */ 10 | public abstract class ArchiverException extends FrontendException { 11 | 12 | /** 13 | * Builds an exception with the given message. 14 | * 15 | * @param message Message. 16 | */ 17 | protected ArchiverException(final String message) { 18 | super(message); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/ArchiverProvider.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import java.nio.file.Path; 4 | import java.util.Optional; 5 | 6 | /** 7 | * Provider of archivers. 8 | * 9 | * @since 2.0.0 10 | */ 11 | public interface ArchiverProvider { 12 | 13 | /** 14 | * Gets an archiver capable to process the given archive file. 15 | * 16 | * @param archiveFilePath Path to the archive file. 17 | * @return Archiver. 18 | */ 19 | Optional findByArchiveFilePath(Path archiveFilePath); 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/DirectoryNotFoundException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import java.nio.file.Path; 4 | 5 | /** 6 | * Exception thrown by an archiver when the directory where the archive shall be exploded does not exist. 7 | * 8 | * @since 1.1.3 9 | */ 10 | public class DirectoryNotFoundException extends ArchiverException { 11 | 12 | /** 13 | * Builds an exception with the given path. 14 | * 15 | * @param directoryPath Path to the directory. 16 | */ 17 | public DirectoryNotFoundException(final Path directoryPath) { 18 | super("Target path is not a directory: " + directoryPath); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/UnsupportedEntryException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | /** 4 | * Exception thrown when an archive contains an entry that cannot be extracted by an archiver, because it is neither a 5 | * directory, nor a file, nor a symbolic link. 6 | * 7 | * @since 1.1.3 8 | */ 9 | public class UnsupportedEntryException extends ArchiverException { 10 | 11 | /** 12 | * Builds an exception for the given entry. 13 | * 14 | * @param entryName Entry name. 15 | */ 16 | public UnsupportedEntryException(final String entryName) { 17 | super("Unsupported entry: " + entryName); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/domain/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Contains business logic of the plugin: downloading and installing a Node.js distribution, and resolve execution 3 | * settings to run a script with Node.js-based executables. 4 | * 5 | * @since 2.0.0 6 | */ 7 | package org.siouan.frontendgradleplugin.domain; 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/infrastructure/archiver/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides archiver implementations. 3 | * 4 | * @since 2.0.0 5 | */ 6 | package org.siouan.frontendgradleplugin.infrastructure.archiver; 7 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/BeanInstanciationException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.bean; 2 | 3 | /** 4 | * Exception thrown when a bean instanciation fails. 5 | * 6 | * @since 2.0.0 7 | */ 8 | public class BeanInstanciationException extends BeanRegistryException { 9 | 10 | BeanInstanciationException(final Class beanClass, final Throwable cause) { 11 | super(beanClass, "Cannot create instance of bean '" + beanClass.getName() + '\'', cause); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/BeanRegistryException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.bean; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * Base class of exceptions thrown by the bean registry. 7 | * 8 | * @since 2.0.0 9 | */ 10 | @Getter 11 | public abstract class BeanRegistryException extends Exception { 12 | 13 | private final Class beanClass; 14 | 15 | protected BeanRegistryException(final Class beanClass, final String message) { 16 | this(beanClass, message, null); 17 | } 18 | 19 | protected BeanRegistryException(final Class beanClass, final String message, final Throwable cause) { 20 | super(message, cause); 21 | this.beanClass = beanClass; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/TooManyCandidateBeansException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.bean; 2 | 3 | import static java.util.stream.Collectors.toSet; 4 | 5 | import java.util.Arrays; 6 | 7 | /** 8 | * Exception thrown when multiple beans in the registry are valid candidates for a type of constructor parameter. 9 | * 10 | * @since 2.0.0 11 | */ 12 | public class TooManyCandidateBeansException extends BeanRegistryException { 13 | 14 | TooManyCandidateBeansException(final Class beanClass, final Object... beans) { 15 | super(beanClass, "Multiple beans were found for type '" + beanClass + "': " + String.join(", ", 16 | Arrays.stream(beans).map(Object::getClass).map(Class::getName).collect(toSet()))); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/ZeroOrMultiplePublicConstructorsException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.bean; 2 | 3 | /** 4 | * Exception thrown when a bean has zero or multiple public constructors. Such bean can not be instanciated because the 5 | * registry does not know how to select the relevant constructor. 6 | * 7 | * @since 2.0.0 8 | */ 9 | public class ZeroOrMultiplePublicConstructorsException extends BeanRegistryException { 10 | 11 | ZeroOrMultiplePublicConstructorsException(final Class beanClass) { 12 | super(beanClass, "Class '" + beanClass.getName() + "' must declare a single public constructor."); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides infrastructure core classes: inversion of control, logging 3 | * 4 | * @since 2.0.0 5 | */ 6 | package org.siouan.frontendgradleplugin.infrastructure.bean; 7 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/AssembleTask.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 2 | 3 | import javax.inject.Inject; 4 | 5 | import org.gradle.api.model.ObjectFactory; 6 | import org.gradle.api.provider.Property; 7 | import org.gradle.api.tasks.Input; 8 | import org.gradle.api.tasks.Optional; 9 | import org.gradle.process.ExecOperations; 10 | 11 | /** 12 | * This task assembles project artifacts. 13 | */ 14 | public class AssembleTask extends AbstractRunCommandTask { 15 | 16 | @Inject 17 | public AssembleTask(final ObjectFactory objectFactory, final ExecOperations execOperations) { 18 | super(objectFactory, execOperations); 19 | } 20 | 21 | @Input 22 | @Optional 23 | public Property getAssembleScript() { 24 | return executableArgs; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/CheckTask.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 2 | 3 | import javax.inject.Inject; 4 | 5 | import org.gradle.api.model.ObjectFactory; 6 | import org.gradle.api.provider.Property; 7 | import org.gradle.api.tasks.Input; 8 | import org.gradle.api.tasks.Optional; 9 | import org.gradle.process.ExecOperations; 10 | 11 | /** 12 | * This task checks the project. 13 | */ 14 | public class CheckTask extends AbstractRunCommandTask { 15 | 16 | @Inject 17 | public CheckTask(final ObjectFactory objectFactory, final ExecOperations execOperations) { 18 | super(objectFactory, execOperations); 19 | } 20 | 21 | @Input 22 | @Optional 23 | public Property getCheckScript() { 24 | return executableArgs; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/NonRunnableTaskException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Exception thrown when a task is not runnable. 7 | * 8 | * @since 6.0.0 9 | */ 10 | public class NonRunnableTaskException extends FrontendException { 11 | 12 | public NonRunnableTaskException(final String message) { 13 | super(message); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/PublishTask.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 2 | 3 | import javax.inject.Inject; 4 | 5 | import org.gradle.api.model.ObjectFactory; 6 | import org.gradle.api.provider.Property; 7 | import org.gradle.api.tasks.Input; 8 | import org.gradle.api.tasks.Optional; 9 | import org.gradle.process.ExecOperations; 10 | 11 | /** 12 | * This task publishes project artifacts. 13 | */ 14 | public class PublishTask extends AbstractRunCommandTask { 15 | 16 | @Inject 17 | public PublishTask(final ObjectFactory objectFactory, final ExecOperations execOperations) { 18 | super(objectFactory, execOperations); 19 | } 20 | 21 | @Input 22 | @Optional 23 | public Property getPublishScript() { 24 | return executableArgs; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides the plugin's tasks. 3 | */ 4 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 5 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/infrastructure/system/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides implementations of domain provider interfaces. 3 | * 4 | * @since 2.0.0 5 | */ 6 | package org.siouan.frontendgradleplugin.infrastructure.system; 7 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/main/java/org/siouan/frontendgradleplugin/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides the plugin bootstrap class. 3 | */ 4 | package org.siouan.frontendgradleplugin; 5 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/test/java/org/siouan/frontendgradleplugin/domain/PackageManagerFixture.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.NoArgsConstructor; 5 | 6 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 7 | public final class PackageManagerFixture { 8 | 9 | public static PackageManager aPackageManager() { 10 | return PackageManager.builder().type(PackageManagerType.NPM).version("9.7.1").build(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/test/java/org/siouan/frontendgradleplugin/domain/installer/BuildTemporaryFileNameTest.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import static org.assertj.core.api.Assertions.assertThat; 4 | 5 | import org.junit.jupiter.api.Test; 6 | import org.junit.jupiter.api.extension.ExtendWith; 7 | import org.mockito.InjectMocks; 8 | import org.mockito.junit.jupiter.MockitoExtension; 9 | 10 | @ExtendWith(MockitoExtension.class) 11 | class BuildTemporaryFileNameTest { 12 | 13 | @InjectMocks 14 | private BuildTemporaryFileName usecase; 15 | 16 | @Test 17 | void should_return_temporary_fileName() { 18 | assertThat(usecase.execute("/home/user/file.tar.gz")).isEqualTo("/home/user/file.tar.gz.tmp"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/test/java/org/siouan/frontendgradleplugin/domain/installer/CredentialsFixture.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.NoArgsConstructor; 5 | 6 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 7 | public final class CredentialsFixture { 8 | 9 | public static Credentials someCredentials() { 10 | return someCredentials("goezkgir1fei3"); 11 | } 12 | 13 | public static Credentials someCredentials(final String username) { 14 | return Credentials.builder().username(username).password("ger#~76'ger").build(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/test/java/org/siouan/frontendgradleplugin/domain/installer/ProxySettingsFixture.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.net.Proxy; 4 | 5 | import lombok.AccessLevel; 6 | import lombok.NoArgsConstructor; 7 | 8 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 9 | public final class ProxySettingsFixture { 10 | 11 | public static ProxySettings direct() { 12 | return ProxySettings.builder().proxyType(Proxy.Type.DIRECT).build(); 13 | } 14 | 15 | public static ProxySettings someProxySettings() { 16 | return ProxySettings 17 | .builder() 18 | .proxyType(Proxy.Type.HTTP) 19 | .proxyHost("example.com") 20 | .proxyPort(443) 21 | .credentials(null) 22 | .build(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/test/java/org/siouan/frontendgradleplugin/domain/installer/archiver/ArchiveEntryType.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | /** 4 | * Internal type of an entry. 5 | */ 6 | enum ArchiveEntryType { 7 | 8 | SYMBOLIC_LINK, 9 | DIRECTORY, 10 | FILE, 11 | UNKNOWN 12 | } 13 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/test/java/org/siouan/frontendgradleplugin/test/PathFixture.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.test; 2 | 3 | import java.nio.file.Path; 4 | import java.nio.file.Paths; 5 | 6 | import lombok.AccessLevel; 7 | import lombok.NoArgsConstructor; 8 | 9 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 10 | public final class PathFixture { 11 | 12 | public static final Path ANY_PATH = Paths.get("/frontend-gradle-plugin/any-path"); 13 | 14 | public static final Path TMP_PATH = ANY_PATH.resolve("tmp"); 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/test/java/org/siouan/frontendgradleplugin/test/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides utilities for automated tests. 3 | */ 4 | package org.siouan.frontendgradleplugin.test; 5 | -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/test/resources/archive-linux.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk17/src/test/resources/archive-linux.zip -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/test/resources/archive-win.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk17/src/test/resources/archive-win.zip -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/test/resources/archive.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk17/src/test/resources/archive.tar.gz -------------------------------------------------------------------------------- /plugins/frontend-jdk17/src/test/resources/invalid-archive.unknown: -------------------------------------------------------------------------------- 1 | 1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901- -------------------------------------------------------------------------------- /plugins/frontend-jdk21/gradle.properties: -------------------------------------------------------------------------------- 1 | fgpJdkVersion=21 2 | fgpGroup=org.siouan 3 | fgpVersion=10.0.0 4 | fgpDisplayName=Frontend Gradle plugin 5 | fgpDescription=Build Javascript applications with Node, NPM, PNPM, Yarn: distribution management and package manager activation (Corepack), built-in tasks, additional task types. 6 | fgpImplementationClass=org.siouan.frontendgradleplugin.FrontendGradlePlugin 7 | fgpWebsiteUrl=https://siouan.github.io/frontend-gradle-plugin/ 8 | fgpVcsUrl=https://github.com/siouan/frontend-gradle-plugin.git 9 | fgpGradlePluginPortalTags=corepack,frontend,node,nodejs,npm,pnpm,yarn 10 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/java/org/siouan/frontendgradleplugin/test/PluginTaskOutcome.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.test; 2 | 3 | import org.gradle.testkit.runner.TaskOutcome; 4 | 5 | /** 6 | * Enumeration of task outcomes for utilities in {@link GradleBuildAssertions} class. 7 | * 8 | * @since 7.0.0 9 | */ 10 | public enum PluginTaskOutcome { 11 | FAILED(TaskOutcome.FAILED), 12 | IGNORED(null), 13 | SKIPPED(TaskOutcome.SKIPPED), 14 | SUCCESS(TaskOutcome.SUCCESS), 15 | UP_TO_DATE(TaskOutcome.UP_TO_DATE); 16 | 17 | private final TaskOutcome nativeOutcome; 18 | 19 | PluginTaskOutcome(final TaskOutcome nativeOutcome) { 20 | this.nativeOutcome = nativeOutcome; 21 | } 22 | 23 | public TaskOutcome getNativeOutcome() { 24 | return nativeOutcome; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/SHASUMS256.txt: -------------------------------------------------------------------------------- 1 | 8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 node-v10.15.1.txt 2 | c5b1eab3577b2b060caeedfb041098c9febddd6168164ace02845e6151710f30 node-v22.11.0.zip 3 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/bin/corepack: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/bin/node: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo "$0 $*" 4 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/bin/npm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/bin/npx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/bin/pnpm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/bin/pnpx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/bin/yarn: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/corepack.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/node.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/node.exe -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/npm.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/npx.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/pnpm.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/pnpx.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-provided/yarn.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-without-node/bin/corepack: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-without-node/bin/npm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-without-node/bin/npx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-without-node/bin/pnpm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-without-node/bin/pnpx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-without-node/bin/yarn: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-without-node/corepack.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-without-node/npm.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-without-node/npx.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-without-node/pnpm.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-without-node/pnpx.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-dist-without-node/yarn.cmd: -------------------------------------------------------------------------------- 1 | @ECHO off 2 | ECHO %~dp0 %* 3 | @IF EXIST "%~dp0\node.exe" ( 4 | "%~dp0\node.exe" %* 5 | ) ELSE ( 6 | node %* 7 | ) 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/node-v22.11.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk21/src/integrationTest/resources/node-v22.11.0.zip -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/package-any-manager.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-package-manager-resolution-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test package manager resolution", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "npm@10.9.0" 8 | } 9 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/package-invalid-manager.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-package-manager-resolution-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test package manager resolution", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "invalid-manager" 8 | } 9 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/package-no-manager.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-package-manager-resolution-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test package manager resolution", 5 | "private": true, 6 | "license": "UNLICENSED" 7 | } 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/package-npm.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-npm-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test frontend scripts integration in a Gradle build with npm", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "npm@10.9.0", 8 | "cacheDirectories": [ 9 | "node_modules" 10 | ], 11 | "scripts": { 12 | "another-script": "node -v && npm -v && echo 'Another frontend script executed' && npm run check", 13 | "assemble": "echo 'Frontend assembled'", 14 | "check": "npm run lint && npm run test", 15 | "lint": "echo 'Frontend linted'", 16 | "publish": "echo 'Frontend published'", 17 | "start": "echo 'Frontend started and stopped'", 18 | "test": "echo 'Frontend tested'" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/package-pnpm.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-pnpm-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test frontend scripts integration in a Gradle build with pnpm", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "pnpm@9.12.3", 8 | "cacheDirectories": [ 9 | "node_modules" 10 | ], 11 | "scripts": { 12 | "another-script": "node -v && pnpm -v && echo 'Another frontend script executed' && pnpm run check", 13 | "assemble": "echo 'Frontend assembled'", 14 | "check": "pnpm run lint && pnpm run test", 15 | "lint": "echo 'Frontend linted'", 16 | "publish": "echo 'Frontend published'", 17 | "start": "echo 'Frontend started and stopped'", 18 | "test": "echo 'Frontend tested'" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/integrationTest/resources/package-yarn.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-gradle-plugin-npm-tests", 3 | "version": "1.0.0", 4 | "description": "Empty project to test frontend scripts integration in a Gradle build with npm", 5 | "private": true, 6 | "license": "UNLICENSED", 7 | "packageManager": "yarn@4.5.1", 8 | "cacheDirectories": [ 9 | "node_modules" 10 | ], 11 | "scripts": { 12 | "another-script": "node -v && yarn -v && echo 'Another frontend script executed' && yarn run check", 13 | "assemble": "echo 'Frontend assembled'", 14 | "check": "yarn run lint && yarn run test", 15 | "lint": "echo 'Frontend linted'", 16 | "publish": "echo 'Frontend published'", 17 | "start": "echo 'Frontend started and stopped'", 18 | "test": "echo 'Frontend tested'" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/ExecutableType.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Types of executable supported by the plugin. 5 | * 6 | * @since 1.2.0 7 | */ 8 | public enum ExecutableType { 9 | 10 | COREPACK, 11 | NODE, 12 | NPM, 13 | PNPM, 14 | YARN 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/FrontendException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Base class for checked exceptions thrown by the plugin. 5 | */ 6 | public abstract class FrontendException extends Exception { 7 | 8 | protected FrontendException(final String message) { 9 | super(message); 10 | } 11 | 12 | protected FrontendException(final Throwable throwable) { 13 | super(throwable); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/InvalidJsonFileException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | import java.nio.file.Path; 4 | 5 | /** 6 | * Exception thrown when a JSON file does not contain valid JSON. 7 | * 8 | * @since 7.0.0 9 | */ 10 | public class InvalidJsonFileException extends FrontendException { 11 | 12 | public InvalidJsonFileException(final Path jsonFilePath) { 13 | super("Invalid JSON file: " + jsonFilePath); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/MalformedPackageManagerSpecification.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Exception thrown when a package manager specification does not match format {@code @}. 5 | * 6 | * @since 7.0.0 7 | */ 8 | public class MalformedPackageManagerSpecification extends FrontendException { 9 | 10 | public MalformedPackageManagerSpecification(final String packageManagerSpecification) { 11 | super("Malformed package manager specification: '" + packageManagerSpecification + '\''); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/PackageManager.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | import lombok.Builder; 4 | 5 | /** 6 | * Model class providing the content of the 7 | * packageManager property located in a 8 | * {@code package.json} file. 9 | * 10 | * @since 7.0.0 11 | */ 12 | @Builder 13 | public record PackageManager(PackageManagerType type, String version) {} 14 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/ResolveExecutablePathCommand.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | import java.nio.file.Path; 4 | 5 | import lombok.Builder; 6 | import lombok.EqualsAndHashCode; 7 | import lombok.Getter; 8 | 9 | /** 10 | * Command providing parameters to get the path to an executable. 11 | * 12 | * @since 7.0.0 13 | */ 14 | @Builder 15 | @Getter 16 | @EqualsAndHashCode(onlyExplicitlyIncluded = true) 17 | public class ResolveExecutablePathCommand { 18 | 19 | /** 20 | * Path to the Node.js install directory. 21 | */ 22 | @EqualsAndHashCode.Include 23 | private final Path nodeInstallDirectoryPath; 24 | 25 | /** 26 | * Underlying platform. 27 | */ 28 | @EqualsAndHashCode.Include 29 | private final Platform platform; 30 | } 31 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/UnsupportedPackageManagerException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Exception thrown when a package manager specification ({@code @}) refers to an unsupported package 5 | * manager. 6 | * 7 | * @since 7.0.0 8 | */ 9 | public class UnsupportedPackageManagerException extends FrontendException { 10 | 11 | public UnsupportedPackageManagerException(final String packageManagerName) { 12 | super("Unsupported package manager: '" + packageManagerName + '\''); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/UnsupportedPlatformException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | /** 4 | * Exception thrown when the underlying platform is not supported by the plugin. 5 | * 6 | * @since 2.0.0 7 | */ 8 | public class UnsupportedPlatformException extends FrontendException { 9 | 10 | public UnsupportedPlatformException(final Platform platform) { 11 | super("This platform is not supported yet: " + platform); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/BuildTemporaryFileName.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | /** 4 | * Generates a temporary file name. 5 | * 6 | * @since 4.0.1 7 | */ 8 | public class BuildTemporaryFileName { 9 | 10 | public static final String TMP_EXTENSION = ".tmp"; 11 | 12 | /** 13 | * Generates a temporary file name based on the given name. 14 | * 15 | * @param fileName Regular file name. 16 | * @return Temporary file name. 17 | */ 18 | public String execute(final String fileName) { 19 | return fileName + TMP_EXTENSION; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/Credentials.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import lombok.Builder; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.Getter; 6 | 7 | /** 8 | * Simple credentials based on a username/password tuple. 9 | * 10 | * @since 3.0.0 11 | */ 12 | @Builder 13 | @Getter 14 | @EqualsAndHashCode(onlyExplicitlyIncluded = true) 15 | public class Credentials { 16 | 17 | @EqualsAndHashCode.Include 18 | private final String username; 19 | 20 | @EqualsAndHashCode.Include 21 | private final String password; 22 | } 23 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/HttpClientProvider.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | /** 4 | * Provider of HTTP clients. 5 | * 6 | * @since 4.0.1 7 | */ 8 | public interface HttpClientProvider { 9 | 10 | /** 11 | * Gets an HTTP client. 12 | * 13 | * @return HTTP client. 14 | */ 15 | HttpClient getInstance(); 16 | } 17 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/InvalidDistributionUrlException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.net.URL; 4 | 5 | import org.siouan.frontendgradleplugin.domain.FrontendException; 6 | 7 | /** 8 | * Exception thrown when the URL to download a distribution is not valid: the URL must contain a non-empty path part 9 | * (e.g. can not be {@code https:///} or {@code https:///directory/}). It can not end with a trailing 10 | * slash '/' character. 11 | * 12 | * @since 2.0.0 13 | */ 14 | public class InvalidDistributionUrlException extends FrontendException { 15 | 16 | public InvalidDistributionUrlException(final URL distributionUrl) { 17 | super("Distribution URL must have a path with a non-empty trailing file name: '" + distributionUrl + '\''); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/InvalidNodeDistributionException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Exception thrown when a downloaded Node distribution is corrupted. 7 | * 8 | * @since 2.0.0 9 | */ 10 | public class InvalidNodeDistributionException extends FrontendException { 11 | 12 | public InvalidNodeDistributionException() { 13 | super("Distribution file corrupted: invalid shasum"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/NodeDistributionShasumNotFoundException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Exception thrown when the shasum of a Node distribution could not be found in the file providing shasums for all 7 | * packages of a given release. 8 | */ 9 | public class NodeDistributionShasumNotFoundException extends FrontendException { 10 | 11 | public NodeDistributionShasumNotFoundException(final String distributionFileName) { 12 | super("Distribution shasum not found: '" + distributionFileName + '\''); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/ResolveProxySettingsByUrlCommand.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.net.URL; 4 | import java.util.Set; 5 | 6 | import lombok.Builder; 7 | 8 | /** 9 | * Parameters to resolve proxy settings. 10 | * 11 | * @since 7.0.0 12 | */ 13 | @Builder 14 | public record ResolveProxySettingsByUrlCommand(String httpProxyHost, int httpProxyPort, 15 | Credentials httpProxyCredentials, String httpsProxyHost, int httpsProxyPort, Credentials httpsProxyCredentials, 16 | URL resourceUrl, String systemHttpProxyHost, int systemHttpProxyPort, String systemHttpsProxyHost, 17 | int systemHttpsProxyPort, Set systemNonProxyHosts) {} 18 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/ResourceDownloadException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Exception thrown when a resource download definitely failed despite eventual multiple attempts. 7 | * 8 | * @since 4.0.1 9 | */ 10 | public class ResourceDownloadException extends FrontendException { 11 | 12 | public ResourceDownloadException(final String message) { 13 | super(message); 14 | } 15 | 16 | public ResourceDownloadException(final Throwable e) { 17 | super(e); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/RetryableResourceDownloadException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.io.IOException; 4 | 5 | /** 6 | * Exception used to notify an attempt to download a resource failed for a reason that may trigger a retry. 7 | * 8 | * @since 7.1.0. 9 | */ 10 | class RetryableResourceDownloadException extends ResourceDownloadException { 11 | 12 | public RetryableResourceDownloadException(final String message) { 13 | super(message); 14 | } 15 | 16 | /** 17 | * Wraps an I/O error, generally a connectivity issue. 18 | * 19 | * @param e I/O error. 20 | */ 21 | public RetryableResourceDownloadException(final IOException e) { 22 | super(e); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/UnsupportedDistributionArchiveException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.nio.file.Path; 4 | 5 | import org.siouan.frontendgradleplugin.domain.FrontendException; 6 | 7 | /** 8 | * Exception thrown when the type of a downloaded distribution archive is not supported. 9 | */ 10 | public class UnsupportedDistributionArchiveException extends FrontendException { 11 | 12 | public UnsupportedDistributionArchiveException(final Path distributionFilePath) { 13 | super("Unsupported type of distribution: " + distributionFilePath); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/Archiver.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import java.io.IOException; 4 | 5 | /** 6 | * Interface of a component capable to process archives. 7 | * 8 | * @since 1.1.3 9 | */ 10 | public interface Archiver { 11 | 12 | /** 13 | * Explodes an archive using the given settings. 14 | * 15 | * @param command Parameters to explode archive content. 16 | * @throws ArchiverException If extraction fails. 17 | * @throws IOException If an I/O error occurs. 18 | */ 19 | void explode(ExplodeCommand command) throws ArchiverException, IOException; 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/ArchiverContext.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import java.io.IOException; 4 | 5 | /** 6 | * Interface of a context used internally by an archiver to provide information during entries extraction. 7 | * 8 | * @since 1.1.3 9 | */ 10 | public interface ArchiverContext extends AutoCloseable { 11 | 12 | /** 13 | * Gets the parameters to explode archive content. 14 | * 15 | * @return Settings. 16 | */ 17 | ExplodeCommand getExplodeCommand(); 18 | 19 | /** 20 | * Closes this context. If this context is already closed, calling this method has no effect. 21 | */ 22 | @Override 23 | void close() throws IOException; 24 | } 25 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/ArchiverException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Base class for exceptions thrown by an archiver when it detects an error. 7 | * 8 | * @since 1.1.3 9 | */ 10 | public abstract class ArchiverException extends FrontendException { 11 | 12 | /** 13 | * Builds an exception with the given message. 14 | * 15 | * @param message Message. 16 | */ 17 | protected ArchiverException(final String message) { 18 | super(message); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/ArchiverProvider.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import java.nio.file.Path; 4 | import java.util.Optional; 5 | 6 | /** 7 | * Provider of archivers. 8 | * 9 | * @since 2.0.0 10 | */ 11 | public interface ArchiverProvider { 12 | 13 | /** 14 | * Gets an archiver capable to process the given archive file. 15 | * 16 | * @param archiveFilePath Path to the archive file. 17 | * @return Archiver. 18 | */ 19 | Optional findByArchiveFilePath(Path archiveFilePath); 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/DirectoryNotFoundException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | import java.nio.file.Path; 4 | 5 | /** 6 | * Exception thrown by an archiver when the directory where the archive shall be exploded does not exist. 7 | * 8 | * @since 1.1.3 9 | */ 10 | public class DirectoryNotFoundException extends ArchiverException { 11 | 12 | /** 13 | * Builds an exception with the given path. 14 | * 15 | * @param directoryPath Path to the directory. 16 | */ 17 | public DirectoryNotFoundException(final Path directoryPath) { 18 | super("Target path is not a directory: " + directoryPath); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/installer/archiver/UnsupportedEntryException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | /** 4 | * Exception thrown when an archive contains an entry that cannot be extracted by an archiver, because it is neither a 5 | * directory, nor a file, nor a symbolic link. 6 | * 7 | * @since 1.1.3 8 | */ 9 | public class UnsupportedEntryException extends ArchiverException { 10 | 11 | /** 12 | * Builds an exception for the given entry. 13 | * 14 | * @param entryName Entry name. 15 | */ 16 | public UnsupportedEntryException(final String entryName) { 17 | super("Unsupported entry: " + entryName); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/domain/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Contains business logic of the plugin: downloading and installing a Node.js distribution, and resolve execution 3 | * settings to run a script with Node.js-based executables. 4 | * 5 | * @since 2.0.0 6 | */ 7 | package org.siouan.frontendgradleplugin.domain; 8 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/infrastructure/archiver/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides archiver implementations. 3 | * 4 | * @since 2.0.0 5 | */ 6 | package org.siouan.frontendgradleplugin.infrastructure.archiver; 7 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/BeanInstanciationException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.bean; 2 | 3 | /** 4 | * Exception thrown when a bean instanciation fails. 5 | * 6 | * @since 2.0.0 7 | */ 8 | public class BeanInstanciationException extends BeanRegistryException { 9 | 10 | BeanInstanciationException(final Class beanClass, final Throwable cause) { 11 | super(beanClass, "Cannot create instance of bean '" + beanClass.getName() + '\'', cause); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/BeanRegistryException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.bean; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * Base class of exceptions thrown by the bean registry. 7 | * 8 | * @since 2.0.0 9 | */ 10 | @Getter 11 | public abstract class BeanRegistryException extends Exception { 12 | 13 | private final Class beanClass; 14 | 15 | protected BeanRegistryException(final Class beanClass, final String message) { 16 | this(beanClass, message, null); 17 | } 18 | 19 | protected BeanRegistryException(final Class beanClass, final String message, final Throwable cause) { 20 | super(message, cause); 21 | this.beanClass = beanClass; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/TooManyCandidateBeansException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.bean; 2 | 3 | import static java.util.stream.Collectors.toSet; 4 | 5 | import java.util.Arrays; 6 | 7 | /** 8 | * Exception thrown when multiple beans in the registry are valid candidates for a type of constructor parameter. 9 | * 10 | * @since 2.0.0 11 | */ 12 | public class TooManyCandidateBeansException extends BeanRegistryException { 13 | 14 | TooManyCandidateBeansException(final Class beanClass, final Object... beans) { 15 | super(beanClass, "Multiple beans were found for type '" + beanClass + "': " + String.join(", ", 16 | Arrays.stream(beans).map(Object::getClass).map(Class::getName).collect(toSet()))); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/ZeroOrMultiplePublicConstructorsException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.bean; 2 | 3 | /** 4 | * Exception thrown when a bean has zero or multiple public constructors. Such bean can not be instanciated because the 5 | * registry does not know how to select the relevant constructor. 6 | * 7 | * @since 2.0.0 8 | */ 9 | public class ZeroOrMultiplePublicConstructorsException extends BeanRegistryException { 10 | 11 | ZeroOrMultiplePublicConstructorsException(final Class beanClass) { 12 | super(beanClass, "Class '" + beanClass.getName() + "' must declare a single public constructor."); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/infrastructure/bean/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides infrastructure core classes: inversion of control, logging 3 | * 4 | * @since 2.0.0 5 | */ 6 | package org.siouan.frontendgradleplugin.infrastructure.bean; 7 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/AssembleTask.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 2 | 3 | import javax.inject.Inject; 4 | 5 | import org.gradle.api.model.ObjectFactory; 6 | import org.gradle.api.provider.Property; 7 | import org.gradle.api.tasks.Input; 8 | import org.gradle.api.tasks.Optional; 9 | import org.gradle.process.ExecOperations; 10 | 11 | /** 12 | * This task assembles project artifacts. 13 | */ 14 | public class AssembleTask extends AbstractRunCommandTask { 15 | 16 | @Inject 17 | public AssembleTask(final ObjectFactory objectFactory, final ExecOperations execOperations) { 18 | super(objectFactory, execOperations); 19 | } 20 | 21 | @Input 22 | @Optional 23 | public Property getAssembleScript() { 24 | return executableArgs; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/CheckTask.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 2 | 3 | import javax.inject.Inject; 4 | 5 | import org.gradle.api.model.ObjectFactory; 6 | import org.gradle.api.provider.Property; 7 | import org.gradle.api.tasks.Input; 8 | import org.gradle.api.tasks.Optional; 9 | import org.gradle.process.ExecOperations; 10 | 11 | /** 12 | * This task checks the project. 13 | */ 14 | public class CheckTask extends AbstractRunCommandTask { 15 | 16 | @Inject 17 | public CheckTask(final ObjectFactory objectFactory, final ExecOperations execOperations) { 18 | super(objectFactory, execOperations); 19 | } 20 | 21 | @Input 22 | @Optional 23 | public Property getCheckScript() { 24 | return executableArgs; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/NonRunnableTaskException.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 2 | 3 | import org.siouan.frontendgradleplugin.domain.FrontendException; 4 | 5 | /** 6 | * Exception thrown when a task is not runnable. 7 | * 8 | * @since 6.0.0 9 | */ 10 | public class NonRunnableTaskException extends FrontendException { 11 | 12 | public NonRunnableTaskException(final String message) { 13 | super(message); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/PublishTask.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 2 | 3 | import javax.inject.Inject; 4 | 5 | import org.gradle.api.model.ObjectFactory; 6 | import org.gradle.api.provider.Property; 7 | import org.gradle.api.tasks.Input; 8 | import org.gradle.api.tasks.Optional; 9 | import org.gradle.process.ExecOperations; 10 | 11 | /** 12 | * This task publishes project artifacts. 13 | */ 14 | public class PublishTask extends AbstractRunCommandTask { 15 | 16 | @Inject 17 | public PublishTask(final ObjectFactory objectFactory, final ExecOperations execOperations) { 18 | super(objectFactory, execOperations); 19 | } 20 | 21 | @Input 22 | @Optional 23 | public Property getPublishScript() { 24 | return executableArgs; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/infrastructure/gradle/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides the plugin's tasks. 3 | */ 4 | package org.siouan.frontendgradleplugin.infrastructure.gradle; 5 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/infrastructure/system/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides implementations of domain provider interfaces. 3 | * 4 | * @since 2.0.0 5 | */ 6 | package org.siouan.frontendgradleplugin.infrastructure.system; 7 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/main/java/org/siouan/frontendgradleplugin/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides the plugin bootstrap class. 3 | */ 4 | package org.siouan.frontendgradleplugin; 5 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/test/java/org/siouan/frontendgradleplugin/domain/PackageManagerFixture.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.NoArgsConstructor; 5 | 6 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 7 | public final class PackageManagerFixture { 8 | 9 | public static PackageManager aPackageManager() { 10 | return PackageManager.builder().type(PackageManagerType.NPM).version("9.7.1").build(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/test/java/org/siouan/frontendgradleplugin/domain/installer/BuildTemporaryFileNameTest.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import static org.assertj.core.api.Assertions.assertThat; 4 | 5 | import org.junit.jupiter.api.Test; 6 | import org.junit.jupiter.api.extension.ExtendWith; 7 | import org.mockito.InjectMocks; 8 | import org.mockito.junit.jupiter.MockitoExtension; 9 | 10 | @ExtendWith(MockitoExtension.class) 11 | class BuildTemporaryFileNameTest { 12 | 13 | @InjectMocks 14 | private BuildTemporaryFileName usecase; 15 | 16 | @Test 17 | void should_return_temporary_fileName() { 18 | assertThat(usecase.execute("/home/user/file.tar.gz")).isEqualTo("/home/user/file.tar.gz.tmp"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/test/java/org/siouan/frontendgradleplugin/domain/installer/CredentialsFixture.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.NoArgsConstructor; 5 | 6 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 7 | public final class CredentialsFixture { 8 | 9 | public static Credentials someCredentials() { 10 | return someCredentials("goezkgir1fei3"); 11 | } 12 | 13 | public static Credentials someCredentials(final String username) { 14 | return Credentials.builder().username(username).password("ger#~76'ger").build(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/test/java/org/siouan/frontendgradleplugin/domain/installer/ProxySettingsFixture.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer; 2 | 3 | import java.net.Proxy; 4 | 5 | import lombok.AccessLevel; 6 | import lombok.NoArgsConstructor; 7 | 8 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 9 | public final class ProxySettingsFixture { 10 | 11 | public static ProxySettings direct() { 12 | return ProxySettings.builder().proxyType(Proxy.Type.DIRECT).build(); 13 | } 14 | 15 | public static ProxySettings someProxySettings() { 16 | return ProxySettings 17 | .builder() 18 | .proxyType(Proxy.Type.HTTP) 19 | .proxyHost("example.com") 20 | .proxyPort(443) 21 | .credentials(null) 22 | .build(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/test/java/org/siouan/frontendgradleplugin/domain/installer/archiver/ArchiveEntryType.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.domain.installer.archiver; 2 | 3 | /** 4 | * Internal type of an entry. 5 | */ 6 | enum ArchiveEntryType { 7 | 8 | SYMBOLIC_LINK, 9 | DIRECTORY, 10 | FILE, 11 | UNKNOWN 12 | } 13 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/test/java/org/siouan/frontendgradleplugin/test/PathFixture.java: -------------------------------------------------------------------------------- 1 | package org.siouan.frontendgradleplugin.test; 2 | 3 | import java.nio.file.Path; 4 | import java.nio.file.Paths; 5 | 6 | import lombok.AccessLevel; 7 | import lombok.NoArgsConstructor; 8 | 9 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 10 | public final class PathFixture { 11 | 12 | public static final Path ANY_PATH = Paths.get("/frontend-gradle-plugin/any-path"); 13 | 14 | public static final Path TMP_PATH = ANY_PATH.resolve("tmp"); 15 | } 16 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/test/java/org/siouan/frontendgradleplugin/test/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides utilities for automated tests. 3 | */ 4 | package org.siouan.frontendgradleplugin.test; 5 | -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/test/resources/archive-linux.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk21/src/test/resources/archive-linux.zip -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/test/resources/archive-win.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk21/src/test/resources/archive-win.zip -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/test/resources/archive.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/plugins/frontend-jdk21/src/test/resources/archive.tar.gz -------------------------------------------------------------------------------- /plugins/frontend-jdk21/src/test/resources/invalid-archive.unknown: -------------------------------------------------------------------------------- 1 | 1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901-1234567890123456789012345678901- -------------------------------------------------------------------------------- /plugins/lombok.config: -------------------------------------------------------------------------------- 1 | config.stopBubbling = true 2 | lombok.addLombokGeneratedAnnotation = true 3 | lombok.log.fieldName=LOGGER 4 | -------------------------------------------------------------------------------- /plugins/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | include("frontend-jdk11", "frontend-jdk17", "frontend-jdk21") 2 | -------------------------------------------------------------------------------- /resources/akhq-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/resources/akhq-light.png -------------------------------------------------------------------------------- /resources/egeria-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/resources/egeria-dark.png -------------------------------------------------------------------------------- /resources/egeria-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/resources/egeria-light.png -------------------------------------------------------------------------------- /resources/kestra-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/resources/kestra-light.png -------------------------------------------------------------------------------- /resources/npm-icon.svg: -------------------------------------------------------------------------------- 1 | n -------------------------------------------------------------------------------- /resources/serverpackcreator-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/resources/serverpackcreator-dark.png -------------------------------------------------------------------------------- /resources/serverpackcreator-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/resources/serverpackcreator-light.png -------------------------------------------------------------------------------- /resources/x-road-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/resources/x-road-dark.png -------------------------------------------------------------------------------- /resources/x-road-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/resources/x-road-light.png -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | includeBuild("plugins") 2 | include("site") 3 | -------------------------------------------------------------------------------- /site/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "printWidth": 120, 4 | "semi": true, 5 | "singleQuote": true, 6 | "tabWidth": 4, 7 | "useTabs": false, 8 | "overrides": [ 9 | { 10 | "files": "*.json", 11 | "options": { 12 | "tabWidth": 2 13 | } 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /site/.yarnrc.yml: -------------------------------------------------------------------------------- 1 | compressionLevel: mixed 2 | 3 | enableGlobalCache: false 4 | 5 | enableTelemetry: false 6 | 7 | nodeLinker: node-modules 8 | -------------------------------------------------------------------------------- /site/build.gradle.kts: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | mavenCentral() 4 | } 5 | 6 | dependencies { 7 | classpath("org.siouan", "frontend-jdk21", "10.0.0") 8 | } 9 | } 10 | 11 | plugins { 12 | id("org.siouan.frontend-jdk21") 13 | } 14 | 15 | frontend { 16 | nodeVersion.set("22.11.0") 17 | assembleScript.set("run generate") 18 | verboseModeEnabled.set(true) 19 | } 20 | 21 | tasks.named("clean") { 22 | delete("${layout.projectDirectory}/.nuxt", "${layout.projectDirectory}/.output", "${layout.projectDirectory}/dist") 23 | } 24 | -------------------------------------------------------------------------------- /site/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import withNuxt from './.nuxt/eslint.config.mjs'; 3 | import eslintConfigPrettier from 'eslint-config-prettier'; 4 | 5 | export default withNuxt(eslintConfigPrettier); 6 | -------------------------------------------------------------------------------- /site/src/app/router.options.ts: -------------------------------------------------------------------------------- 1 | import type { RouterConfig } from '@nuxt/schema'; 2 | 3 | export default { 4 | linkExactActiveClass: 'active', 5 | scrollBehaviorType: 'smooth', 6 | }; 7 | -------------------------------------------------------------------------------- /site/src/assets/EtelkaTextPro.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/site/src/assets/EtelkaTextPro.otf -------------------------------------------------------------------------------- /site/src/assets/scss/custom.scss: -------------------------------------------------------------------------------- 1 | @import 'variables'; 2 | @import 'bootstrap/scss/bootstrap'; 3 | 4 | @font-face { 5 | font-family: EtelkaTextPro; 6 | src: url($etelkaTextProFontFile) format('opentype'); 7 | } 8 | -------------------------------------------------------------------------------- /site/src/assets/scss/variables.scss: -------------------------------------------------------------------------------- 1 | // // Bootstrap variables override (full list in _variables.scss) 2 | $font-size-base: 1rem; 3 | $headings-font-family: EtelkaTextPro, Helvetica, Arial, sans-serif; 4 | $h1-font-size: $font-size-base * 1.75; 5 | $h2-font-size: $font-size-base * 1.5; 6 | $h3-font-size: $font-size-base * 1.25; 7 | $h4-font-size: $font-size-base; 8 | $h5-font-size: $font-size-base; 9 | $h6-font-size: $font-size-base; 10 | $body-bg-dark: #000000; 11 | 12 | // // Custom variables 13 | $etelkaTextProFontFile: '@/public/EtelkaTextPro.otf'; 14 | -------------------------------------------------------------------------------- /site/src/components/block-quote.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 14 | -------------------------------------------------------------------------------- /site/src/components/code-comment.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /site/src/components/code.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /site/src/components/faq/cache-directory-faq.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /site/src/components/faq/custom-environment-variables-faq.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /site/src/components/faq/custom-nodejs-distribution-server-faq.vue: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /site/src/components/faq/faq.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /site/src/components/feature-card.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 25 | -------------------------------------------------------------------------------- /site/src/components/image.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 17 | -------------------------------------------------------------------------------- /site/src/components/info.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /site/src/components/link/corepack-link.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 18 | -------------------------------------------------------------------------------- /site/src/components/link/github-link.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 22 | -------------------------------------------------------------------------------- /site/src/components/link/gradle-docs-link.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /site/src/components/link/gradle-guides-link.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 14 | -------------------------------------------------------------------------------- /site/src/components/link/gradle-link.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 24 | -------------------------------------------------------------------------------- /site/src/components/link/gradle-plugins-link.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /site/src/components/link/gradle-task-outcome-link.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /site/src/components/link/image-link.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 18 | -------------------------------------------------------------------------------- /site/src/components/link/java-network-properties-link.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /site/src/components/link/java-system-properties-link.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /site/src/components/link/link.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 16 | 17 | 22 | -------------------------------------------------------------------------------- /site/src/components/link/nodejs-link.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 21 | -------------------------------------------------------------------------------- /site/src/components/link/npm-docs-link.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /site/src/components/link/npm-link.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /site/src/components/link/pnpm-link.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /site/src/components/link/property-link-anchor.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /site/src/components/link/property-link.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 15 | -------------------------------------------------------------------------------- /site/src/components/link/repo-link.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 22 | -------------------------------------------------------------------------------- /site/src/components/link/site-link-anchor.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | -------------------------------------------------------------------------------- /site/src/components/link/site-link.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 23 | -------------------------------------------------------------------------------- /site/src/components/link/task-link-anchor.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /site/src/components/link/task-link.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /site/src/components/link/yarn-link.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 29 | -------------------------------------------------------------------------------- /site/src/components/main-title.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /site/src/components/maintenance.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /site/src/components/property/assemble-script-property.vue: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /site/src/components/property/cache-directory-property.vue: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /site/src/components/property/check-script-property.vue: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /site/src/components/property/http-proxy-password-property.vue: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /site/src/components/property/http-proxy-port-property.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /site/src/components/property/https-proxy-password-property.vue: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /site/src/components/property/https-proxy-port-property.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /site/src/components/property/install-script-property.vue: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /site/src/components/property/node-distribution-server-password-property.vue: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /site/src/components/property/node-distribution-url-root-property.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /site/src/components/property/node-install-directory-property.vue: -------------------------------------------------------------------------------- 1 | 22 | -------------------------------------------------------------------------------- /site/src/components/property/node-version-property.vue: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /site/src/components/property/publish-script-property.vue: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /site/src/components/property/retry-http-statuses-property.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /site/src/components/property/retry-initial-interval-ms-property.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /site/src/components/property/retry-interval-multiplier-property.vue: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /site/src/components/property/retry-max-interval-ms-property.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /site/src/components/property/verbose-mode-enabled-property.vue: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /site/src/components/section-title.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /site/src/components/sub-sub-title.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /site/src/components/sub-title.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /site/src/components/task/optional-task-property-badge.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /site/src/components/task/task-property-command-line-option-badge.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 16 | -------------------------------------------------------------------------------- /site/src/components/v5/property/yarn-distribution-server-password-property-v5.vue: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /site/src/components/v5/property/yarn-distribution-server-username-property-v5.vue: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /site/src/components/v5/property/yarn-distribution-url-root-property-v5.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /site/src/components/v5/property/yarn-enabled-property-v5.vue: -------------------------------------------------------------------------------- 1 | 22 | -------------------------------------------------------------------------------- /site/src/components/v5/property/yarn-install-directory-property-v5.vue: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /site/src/components/v5/property/yarn-version-property-v5.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /site/src/components/v6/link/npx-link-v6.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /site/src/components/v6/property/node-install-directory-property-v6.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /site/src/components/v6/property/node-version-property-v6.vue: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /site/src/components/v6/property/yarn-version-property-v6.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /site/src/components/v9/property/clean-script-property-v9.vue: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /site/src/components/v9/property/node-install-directory-property-v9.vue: -------------------------------------------------------------------------------- 1 | 23 | -------------------------------------------------------------------------------- /site/src/components/warning.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /site/src/layouts/default.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 18 | -------------------------------------------------------------------------------- /site/src/modules/legacy-routes.ts: -------------------------------------------------------------------------------- 1 | import { defineNuxtModule, extendRouteRules } from '@nuxt/kit' 2 | 3 | export default defineNuxtModule ({ 4 | setup(options, nuxt) { 5 | extendRouteRules('/node-npm-npx-yarn-tasks/', { 6 | redirect: { 7 | to: `${nuxt.options.app.baseURL}6/node-corepack-npm-pnpm-yarn-tasks/`, 8 | statusCode: 308 9 | } 10 | }); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /site/src/public/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/site/src/public/.nojekyll -------------------------------------------------------------------------------- /site/src/public/EtelkaTextPro.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/site/src/public/EtelkaTextPro.otf -------------------------------------------------------------------------------- /site/src/public/egeria.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/site/src/public/egeria.png -------------------------------------------------------------------------------- /site/src/public/serverpackcreator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/site/src/public/serverpackcreator.png -------------------------------------------------------------------------------- /site/src/public/siouan-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/site/src/public/siouan-icon.png -------------------------------------------------------------------------------- /site/src/public/x-road.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siouan/frontend-gradle-plugin/fe5997dfe424bf007603e6b90facc53ed9f650f1/site/src/public/x-road.png -------------------------------------------------------------------------------- /site/src/server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../.nuxt/tsconfig.server.json" 3 | } 4 | -------------------------------------------------------------------------------- /site/src/utils/component-size.ts: -------------------------------------------------------------------------------- 1 | export enum ComponentSize { 2 | SMALL = 'sm', 3 | LARGE = 'lg' 4 | } 5 | 6 | export type ComponentSizeType = `${ComponentSize}`; 7 | -------------------------------------------------------------------------------- /site/src/utils/script-language.ts: -------------------------------------------------------------------------------- 1 | export enum ScriptLanguageId { 2 | GROOVY = 'groovy', 3 | KOTLIN = 'kotlin' 4 | } 5 | 6 | export type ScriptLanguageIdType = `${ScriptLanguageId}`; 7 | -------------------------------------------------------------------------------- /site/src/utils/storage.ts: -------------------------------------------------------------------------------- 1 | export interface Storage { 2 | clear: () => void, 3 | getItem: (key: string) => string | null, 4 | removeItem: (key: string) => void, 5 | setItem: (key: string, item: string) => void 6 | } 7 | -------------------------------------------------------------------------------- /site/src/utils/task-outcome.ts: -------------------------------------------------------------------------------- 1 | export enum TaskOutcome { 2 | SUCCESS = 'SUCCESS', 3 | NO_SOURCE = 'NO_SOURCE', 4 | SKIPPED = 'SKIPPED', 5 | UP_TO_DATE = 'UP_TO_DATE' 6 | } 7 | 8 | export type TaskOutcomeType = `${TaskOutcome}`; 9 | -------------------------------------------------------------------------------- /site/src/utils/task-property.ts: -------------------------------------------------------------------------------- 1 | export enum TaskPropertyBinding { 2 | CUSTOM = 'C', 3 | PROPERTY = 'P', 4 | USER = 'U' 5 | } 6 | 7 | export type TaskPropertyBindingType = `${TaskPropertyBinding}`; 8 | 9 | export enum TaskPropertyType { 10 | DIRECTORY = 'D', 11 | EXECUTABLE_TYPE = 'ET', 12 | FILE = 'F', 13 | STRING = 'S', 14 | REGULAR_FILE = 'RF' 15 | } 16 | 17 | export type TaskPropertyTypeType = `${TaskPropertyType}`; 18 | -------------------------------------------------------------------------------- /site/src/utils/theme.ts: -------------------------------------------------------------------------------- 1 | export enum ThemeId { 2 | DARK = 'dark', 3 | LIGHT = 'light' 4 | } 5 | 6 | export type ThemeIdType = `${ThemeId}`; 7 | 8 | export enum PreferedThemeId { 9 | SYSTEM = 'system', 10 | DARK = ThemeId.DARK, 11 | LIGHT = ThemeId.LIGHT 12 | } 13 | 14 | export type PreferedThemeIdType = `${PreferedThemeId}`; 15 | -------------------------------------------------------------------------------- /site/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.nuxt/tsconfig.json" 3 | } 4 | --------------------------------------------------------------------------------