| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 7dbccc6 commit 4db08ef
5 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -296,6 +296,72 @@ describe('getVersionFromFileContent', () => { | |||
| 296 | 296 | ); | |
| 297 | 297 | }); | |
| 298 | 298 | }); | |
| 299 | + | ||
| 300 | + describe('.tool-versions', () => { | ||
| 301 | + it.each([ | ||
| 302 | + ['java temurin-17.0.3+7', '17.0.3+7', 'temurin'], | ||
| 303 | + ['java temurin-jre-17.0.3+7', '17.0.3+7', 'temurin'], | ||
| 304 | + ['java adoptopenjdk-11.0.16+8', '11.0.16+8', 'temurin'], | ||
| 305 | + ['java adoptopenjdk-openj9-11.0.16+8', '11.0.16+8', 'temurin'], | ||
| 306 | + ['java zulu-11.56.19', '11.56.19', 'zulu'], | ||
| 307 | + ['java corretto-17.0.13.11.1', '17', 'corretto'], // corretto -> major only | ||
| 308 | + ['java liberica-11.0.15+10', '11.0.15+10', 'liberica'], | ||
| 309 | + ['java microsoft-11.0.13.8.1', '11.0.13', 'microsoft'], | ||
| 310 | + ['java semeru-openj9-11.0.25+9', '11.0.25+9', 'semeru'], | ||
| 311 | + ['java ibm-openj9-11.0.25+9', '11.0.25+9', 'semeru'], | ||
| 312 | + ['java dragonwell-17.0.13.0.13+11', '17.0.13', 'dragonwell'], | ||
| 313 | + ['java graalvm-22.3.0+java17', '22.3.0+java17', 'graalvm'], | ||
| 314 | + ['java graalvm-community-22.3.0', '22.3.0', 'graalvm-community'], | ||
| 315 | + ['java oracle-graalvm-21.0.5', '21.0.5', 'graalvm'], | ||
| 316 | + ['java oracle-21.0.5', '21.0.5', 'oracle'], | ||
| 317 | + ['java sapmachine-21.0.5', '21.0.5', 'sapmachine'], | ||
| 318 | + ['java kona-17.0.13', '17.0.13', 'kona'], | ||
| 319 | + ['java jetbrains-21.0.5', '21.0.5', 'jetbrains'] | ||
| 320 | + ])( | ||
| 321 | + 'parsing %s should return version %s and distribution %s', | ||
| 322 | + (content: string, expectedVersion: string, expectedDist: string) => { | ||
| 323 | + const actual = getVersionFromFileContent( | ||
| 324 | + content, | ||
| 325 | + 'openjdk', | ||
| 326 | + '.tool-versions' | ||
| 327 | + ); | ||
| 328 | + expect(actual?.version).toBe(expectedVersion); | ||
| 329 | + expect(actual?.distribution).toBe(expectedDist); | ||
| 330 | + } | ||
| 331 | + ); | ||
| 332 | + | ||
| 333 | + it.each([ | ||
| 334 | + ['java 17.0.7', '17.0.7'], | ||
| 335 | + ['java 17', '17'], | ||
| 336 | + ['java 1.8', '8'], | ||
| 337 | + ['java 21-ea', '21-ea'] | ||
| 338 | + ])( | ||
| 339 | + 'parsing prefix-less %s should return version %s and no distribution', | ||
| 340 | + (content: string, expectedVersion: string) => { | ||
| 341 | + const actual = getVersionFromFileContent( | ||
| 342 | + content, | ||
| 343 | + 'temurin', | ||
| 344 | + '.tool-versions' | ||
| 345 | + ); | ||
| 346 | + expect(actual?.version).toBe(expectedVersion); | ||
| 347 | + expect(actual?.distribution).toBeUndefined(); | ||
| 348 | + } | ||
| 349 | + ); | ||
| 350 | + | ||
| 351 | + it('should warn and return undefined distribution for unsupported vendor', () => { | ||
| 352 | + const warnSpy = jest.spyOn(core, 'warning'); | ||
| 353 | + const actual = getVersionFromFileContent( | ||
| 354 | + 'java openjdk-17.0.7', | ||
| 355 | + 'temurin', | ||
| 356 | + '.tool-versions' | ||
| 357 | + ); | ||
| 358 | + expect(actual?.version).toBe('17.0.7'); | ||
| 359 | + expect(actual?.distribution).toBeUndefined(); | ||
| 360 | + expect(warnSpy).toHaveBeenCalledWith( | ||
| 361 | + expect.stringContaining('Unknown asdf distribution identifier') | ||
| 362 | + ); | ||
| 363 | + }); | ||
| 364 | + }); | ||
| 299 | 365 | }); | |
| 300 | 366 | ||
| 301 | 367 | describe('isGhes', () => { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -95966,8 +95966,10 @@ function getVersionFromFileContent(content, distributionName, versionFile) { | |||
| 95966 | 95966 | } | |
| 95967 | 95967 | const versionFileName = getFileName(versionFile); | |
| 95968 | 95968 | if (versionFileName == '.tool-versions') { | |
| 95969 | + // Capture an optional asdf-java vendor prefix (e.g. `temurin-`, `corretto-`) | ||
| 95970 | + // in the `distribution` group so it can be mapped to a setup-java distribution. | ||
| 95969 | 95971 | javaVersionRegExp = | |
| 95970 | - /^java\s+(?:\S*-)?(?<version>\d+(?:\.\d+)*([+_.-](?:openj9[-._]?\d[\w.-]*|java\d+|jre[-_\w]*|OpenJDK\d+[\w_.-]*|[a-z0-9]+))*)/im; | ||
| 95972 | + /^java\s+(?:(?<distribution>\S*)-)?(?<version>\d+(?:\.\d+)*([+_.-](?:openj9[-._]?\d[\w.-]*|java\d+|jre[-_\w]*|OpenJDK\d+[\w_.-]*|[a-z0-9]+))*)/im; | ||
| 95971 | 95973 | } | |
| 95972 | 95974 | else if (versionFileName == '.sdkmanrc') { | |
| 95973 | 95975 | // Match both version and optional distribution identifier | |
@@ -95987,6 +95989,14 @@ function getVersionFromFileContent(content, distributionName, versionFile) { | |||
| 95987 | 95989 | extractedDistribution = mapSdkmanDistribution(sdkmanDist); | |
| 95988 | 95990 | core.debug(`Parsed distribution '${extractedDistribution}' from SDKMAN identifier '${sdkmanDist}'`); | |
| 95989 | 95991 | } | |
| 95992 | + // Extract distribution from asdf .tool-versions file | ||
| 95993 | + if (versionFileName == '.tool-versions' && match?.groups?.distribution) { | ||
| 95994 | + const asdfDist = match.groups.distribution; | ||
| 95995 | + extractedDistribution = mapAsdfDistribution(asdfDist); | ||
| 95996 | + if (extractedDistribution) { | ||
| 95997 | + core.debug(`Parsed distribution '${extractedDistribution}' from asdf identifier '${asdfDist}'`); | ||
| 95998 | + } | ||
| 95999 | + } | ||
| 95990 | 96000 | core.debug(`Parsed version '${capturedVersion}' from file '${versionFileName}'`); | |
| 95991 | 96001 | if (!capturedVersion) { | |
| 95992 | 96002 | return null; | |
@@ -96035,6 +96045,43 @@ function mapSdkmanDistribution(sdkmanDist) { | |||
| 96035 | 96045 | } | |
| 96036 | 96046 | return mapped; | |
| 96037 | 96047 | } | |
| 96048 | + // Map asdf-java (.tool-versions) vendor identifiers to setup-java distribution names. | ||
| 96049 | + // asdf-java encodes the vendor as a prefix on the version string, e.g. | ||
| 96050 | + // `java temurin-17.0.3+7` or `java semeru-openj9-11.0.25+9`. Packaging variants | ||
| 96051 | + // (`-jre`, `-musl`, `-openj9`, `-crac`, `-javafx`, ...) are collapsed onto the | ||
| 96052 | + // base vendor since setup-java does not distinguish them here. | ||
| 96053 | + function mapAsdfDistribution(asdfDist) { | ||
| 96054 | + const normalized = asdfDist.toLowerCase(); | ||
| 96055 | + // Multi-segment vendors that map to a distinct setup-java distribution. | ||
| 96056 | + if (normalized.startsWith('graalvm-community')) { | ||
| 96057 | + return 'graalvm-community'; | ||
| 96058 | + } | ||
| 96059 | + if (normalized.startsWith('oracle-graalvm')) { | ||
| 96060 | + return 'graalvm'; | ||
| 96061 | + } | ||
| 96062 | + const baseVendor = normalized.split('-')[0]; | ||
| 96063 | + const distributionMap = { | ||
| 96064 | + temurin: 'temurin', | ||
| 96065 | + adoptopenjdk: 'temurin', | ||
| 96066 | + zulu: 'zulu', | ||
| 96067 | + corretto: 'corretto', | ||
| 96068 | + liberica: 'liberica', | ||
| 96069 | + microsoft: 'microsoft', | ||
| 96070 | + semeru: 'semeru', | ||
| 96071 | + ibm: 'semeru', | ||
| 96072 | + dragonwell: 'dragonwell', | ||
| 96073 | + graalvm: 'graalvm', | ||
| 96074 | + oracle: 'oracle', | ||
| 96075 | + sapmachine: 'sapmachine', | ||
| 96076 | + kona: 'kona', | ||
| 96077 | + jetbrains: 'jetbrains' | ||
| 96078 | + }; | ||
| 96079 | + const mapped = distributionMap[baseVendor]; | ||
| 96080 | + if (!mapped) { | ||
| 96081 | + core.warning(`Unknown asdf distribution identifier '${asdfDist}'. Please specify the distribution explicitly.`); | ||
| 96082 | + } | ||
| 96083 | + return mapped; | ||
| 96084 | + } | ||
| 96038 | 96085 | // By convention, action expects version 8 in the format `8.*` instead of `1.8` | |
| 96039 | 96086 | function avoidOldNotation(content) { | |
| 96040 | 96087 | return content.startsWith('1.') ? content.substring(2) : content; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -126958,8 +126958,10 @@ function getVersionFromFileContent(content, distributionName, versionFile) { | |||
| 126958 | 126958 | } | |
| 126959 | 126959 | const versionFileName = getFileName(versionFile); | |
| 126960 | 126960 | if (versionFileName == '.tool-versions') { | |
| 126961 | + // Capture an optional asdf-java vendor prefix (e.g. `temurin-`, `corretto-`) | ||
| 126962 | + // in the `distribution` group so it can be mapped to a setup-java distribution. | ||
| 126961 | 126963 | javaVersionRegExp = | |
| 126962 | - /^java\s+(?:\S*-)?(?<version>\d+(?:\.\d+)*([+_.-](?:openj9[-._]?\d[\w.-]*|java\d+|jre[-_\w]*|OpenJDK\d+[\w_.-]*|[a-z0-9]+))*)/im; | ||
| 126964 | + /^java\s+(?:(?<distribution>\S*)-)?(?<version>\d+(?:\.\d+)*([+_.-](?:openj9[-._]?\d[\w.-]*|java\d+|jre[-_\w]*|OpenJDK\d+[\w_.-]*|[a-z0-9]+))*)/im; | ||
| 126963 | 126965 | } | |
| 126964 | 126966 | else if (versionFileName == '.sdkmanrc') { | |
| 126965 | 126967 | // Match both version and optional distribution identifier | |
@@ -126979,6 +126981,14 @@ function getVersionFromFileContent(content, distributionName, versionFile) { | |||
| 126979 | 126981 | extractedDistribution = mapSdkmanDistribution(sdkmanDist); | |
| 126980 | 126982 | core_debug(`Parsed distribution '${extractedDistribution}' from SDKMAN identifier '${sdkmanDist}'`); | |
| 126981 | 126983 | } | |
| 126984 | + // Extract distribution from asdf .tool-versions file | ||
| 126985 | + if (versionFileName == '.tool-versions' && match?.groups?.distribution) { | ||
| 126986 | + const asdfDist = match.groups.distribution; | ||
| 126987 | + extractedDistribution = mapAsdfDistribution(asdfDist); | ||
| 126988 | + if (extractedDistribution) { | ||
| 126989 | + core_debug(`Parsed distribution '${extractedDistribution}' from asdf identifier '${asdfDist}'`); | ||
| 126990 | + } | ||
| 126991 | + } | ||
| 126982 | 126992 | core_debug(`Parsed version '${capturedVersion}' from file '${versionFileName}'`); | |
| 126983 | 126993 | if (!capturedVersion) { | |
| 126984 | 126994 | return null; | |
@@ -127027,6 +127037,43 @@ function mapSdkmanDistribution(sdkmanDist) { | |||
| 127027 | 127037 | } | |
| 127028 | 127038 | return mapped; | |
| 127029 | 127039 | } | |
| 127040 | + // Map asdf-java (.tool-versions) vendor identifiers to setup-java distribution names. | ||
| 127041 | + // asdf-java encodes the vendor as a prefix on the version string, e.g. | ||
| 127042 | + // `java temurin-17.0.3+7` or `java semeru-openj9-11.0.25+9`. Packaging variants | ||
| 127043 | + // (`-jre`, `-musl`, `-openj9`, `-crac`, `-javafx`, ...) are collapsed onto the | ||
| 127044 | + // base vendor since setup-java does not distinguish them here. | ||
| 127045 | + function mapAsdfDistribution(asdfDist) { | ||
| 127046 | + const normalized = asdfDist.toLowerCase(); | ||
| 127047 | + // Multi-segment vendors that map to a distinct setup-java distribution. | ||
| 127048 | + if (normalized.startsWith('graalvm-community')) { | ||
| 127049 | + return 'graalvm-community'; | ||
| 127050 | + } | ||
| 127051 | + if (normalized.startsWith('oracle-graalvm')) { | ||
| 127052 | + return 'graalvm'; | ||
| 127053 | + } | ||
| 127054 | + const baseVendor = normalized.split('-')[0]; | ||
| 127055 | + const distributionMap = { | ||
| 127056 | + temurin: 'temurin', | ||
| 127057 | + adoptopenjdk: 'temurin', | ||
| 127058 | + zulu: 'zulu', | ||
| 127059 | + corretto: 'corretto', | ||
| 127060 | + liberica: 'liberica', | ||
| 127061 | + microsoft: 'microsoft', | ||
| 127062 | + semeru: 'semeru', | ||
| 127063 | + ibm: 'semeru', | ||
| 127064 | + dragonwell: 'dragonwell', | ||
| 127065 | + graalvm: 'graalvm', | ||
| 127066 | + oracle: 'oracle', | ||
| 127067 | + sapmachine: 'sapmachine', | ||
| 127068 | + kona: 'kona', | ||
| 127069 | + jetbrains: 'jetbrains' | ||
| 127070 | + }; | ||
| 127071 | + const mapped = distributionMap[baseVendor]; | ||
| 127072 | + if (!mapped) { | ||
| 127073 | + warning(`Unknown asdf distribution identifier '${asdfDist}'. Please specify the distribution explicitly.`); | ||
| 127074 | + } | ||
| 127075 | + return mapped; | ||
| 127076 | + } | ||
| 127030 | 127077 | // By convention, action expects version 8 in the format `8.*` instead of `1.8` | |
| 127031 | 127078 | function avoidOldNotation(content) { | |
| 127032 | 127079 | return content.startsWith('1.') ? content.substring(2) : content; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -780,7 +780,27 @@ steps: | |||
| 780 | 780 | ||
| 781 | 781 | Supported files are `.java-version`, `.tool-versions` and `.sdkmanrc`. | |
| 782 | 782 | * In `.java-version` file, only the version should be specified (e.g., 17.0.7). The `.java-version` file recognizes all variants of the version description according to [jenv](https://github.com/jenv/jenv). | |
| 783 | - * In `.tool-versions` file, java version should be preceded by the java keyword (e.g., java 17.0.7). The `.tool-versions` file supports version specifications in accordance with [asdf](https://github.com/asdf-vm/asdf) standards, adhering to Semantic Versioning ([semver](https://semver.org/)). | ||
| 783 | + * In `.tool-versions` file, java version should be preceded by the java keyword (e.g., java 17.0.7). The `.tool-versions` file supports version specifications in accordance with [asdf](https://github.com/asdf-vm/asdf) standards, adhering to Semantic Versioning ([semver](https://semver.org/)). When the entry includes an [asdf-java](https://github.com/halcyon/asdf-java) vendor prefix (e.g. `java temurin-17.0.3+7`), setup-java can infer the `distribution` input automatically. Unrecognized vendor prefixes require setting `distribution` explicitly. | ||
| 784 | + | ||
| 785 | + Supported asdf-java vendor prefix mappings (packaging variants such as `-jre`, `-musl`, `-openj9`, `-crac`, `-javafx` are collapsed onto the base vendor): | ||
| 786 | + | ||
| 787 | + | asdf-java vendor prefix | setup-java distribution | | ||
| 788 | + | ----------------------- | ----------------------- | | ||
| 789 | + | `temurin` | `temurin` | | ||
| 790 | + | `adoptopenjdk` | `temurin` | | ||
| 791 | + | `zulu` | `zulu` | | ||
| 792 | + | `corretto` | `corretto` | | ||
| 793 | + | `liberica` | `liberica` | | ||
| 794 | + | `microsoft` | `microsoft` | | ||
| 795 | + | `semeru`, `ibm` | `semeru` | | ||
| 796 | + | `dragonwell` | `dragonwell` | | ||
| 797 | + | `graalvm`, `oracle-graalvm` | `graalvm` | | ||
| 798 | + | `graalvm-community` | `graalvm-community` | | ||
| 799 | + | `oracle` | `oracle` | | ||
| 800 | + | `sapmachine` | `sapmachine` | | ||
| 801 | + | `kona` | `kona` | | ||
| 802 | + | `jetbrains` | `jetbrains` | | ||
| 803 | + | ||
| 784 | 804 | * In `.sdkmanrc` file, java version should be preceded by the `java=` prefix (e.g., `java=17.0.7-tem`). When a recognized SDKMAN distribution suffix is present, setup-java can infer the `distribution` input automatically. Unrecognized suffixes require setting `distribution` explicitly. The `.sdkmanrc` file supports version specifications in accordance with [file format](https://sdkman.io/usage#env-command), see [Sdkman! documentation](https://sdkman.io/jdks) for more information. | |
| 785 | 805 | ||
| 786 | 806 | Supported SDKMAN suffix mappings: | |
@@ -816,6 +836,19 @@ steps: | |||
| 816 | 836 | java=17.0.7-tem | |
| 817 | 837 | ``` | |
| 818 | 838 | ||
| 839 | + **Example step using `asdf`** (distribution inferred from `.tool-versions`): | ||
| 840 | + ```yml | ||
| 841 | + - name: Setup java | ||
| 842 | + uses: actions/setup-java@v5 | ||
| 843 | + with: | ||
| 844 | + java-version-file: '.tool-versions' | ||
| 845 | + ``` | ||
| 846 | + | ||
| 847 | + **Example `.tool-versions`**: | ||
| 848 | + ``` | ||
| 849 | + java temurin-17.0.7+7 | ||
| 850 | + ``` | ||
| 851 | + | ||
| 819 | 852 | Valid entry options (does not apply to `.sdkmanrc`): | |
| 820 | 853 | ``` | |
| 821 | 854 | major versions: 8, 11, 16, 17, 21 | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -149,8 +149,10 @@ export function getVersionFromFileContent( | |||
| 149 | 149 | ||
| 150 | 150 | const versionFileName = getFileName(versionFile); | |
| 151 | 151 | if (versionFileName == '.tool-versions') { | |
| 152 | + // Capture an optional asdf-java vendor prefix (e.g. `temurin-`, `corretto-`) | ||
| 153 | + // in the `distribution` group so it can be mapped to a setup-java distribution. | ||
| 152 | 154 | javaVersionRegExp = | |
| 153 | - /^java\s+(?:\S*-)?(?<version>\d+(?:\.\d+)*([+_.-](?:openj9[-._]?\d[\w.-]*|java\d+|jre[-_\w]*|OpenJDK\d+[\w_.-]*|[a-z0-9]+))*)/im; | ||
| 155 | + /^java\s+(?:(?<distribution>\S*)-)?(?<version>\d+(?:\.\d+)*([+_.-](?:openj9[-._]?\d[\w.-]*|java\d+|jre[-_\w]*|OpenJDK\d+[\w_.-]*|[a-z0-9]+))*)/im; | ||
| 154 | 156 | } else if (versionFileName == '.sdkmanrc') { | |
| 155 | 157 | // Match both version and optional distribution identifier | |
| 156 | 158 | javaVersionRegExp = | |
@@ -173,6 +175,17 @@ export function getVersionFromFileContent( | |||
| 173 | 175 | ); | |
| 174 | 176 | } | |
| 175 | 177 | ||
| 178 | + // Extract distribution from asdf .tool-versions file | ||
| 179 | + if (versionFileName == '.tool-versions' && match?.groups?.distribution) { | ||
| 180 | + const asdfDist = match.groups.distribution; | ||
| 181 | + extractedDistribution = mapAsdfDistribution(asdfDist); | ||
| 182 | + if (extractedDistribution) { | ||
| 183 | + core.debug( | ||
| 184 | + `Parsed distribution '${extractedDistribution}' from asdf identifier '${asdfDist}'` | ||
| 185 | + ); | ||
| 186 | + } | ||
| 187 | + } | ||
| 188 | + | ||
| 176 | 189 | core.debug( | |
| 177 | 190 | `Parsed version '${capturedVersion}' from file '${versionFileName}'` | |
| 178 | 191 | ); | |
@@ -238,6 +251,49 @@ function mapSdkmanDistribution(sdkmanDist: string): string | undefined { | |||
| 238 | 251 | return mapped; | |
| 239 | 252 | } | |
| 240 | 253 | ||
| 254 | + // Map asdf-java (.tool-versions) vendor identifiers to setup-java distribution names. | ||
| 255 | + // asdf-java encodes the vendor as a prefix on the version string, e.g. | ||
| 256 | + // `java temurin-17.0.3+7` or `java semeru-openj9-11.0.25+9`. Packaging variants | ||
| 257 | + // (`-jre`, `-musl`, `-openj9`, `-crac`, `-javafx`, ...) are collapsed onto the | ||
| 258 | + // base vendor since setup-java does not distinguish them here. | ||
| 259 | + function mapAsdfDistribution(asdfDist: string): string | undefined { | ||
| 260 | + const normalized = asdfDist.toLowerCase(); | ||
| 261 | + | ||
| 262 | + // Multi-segment vendors that map to a distinct setup-java distribution. | ||
| 263 | + if (normalized.startsWith('graalvm-community')) { | ||
| 264 | + return 'graalvm-community'; | ||
| 265 | + } | ||
| 266 | + if (normalized.startsWith('oracle-graalvm')) { | ||
| 267 | + return 'graalvm'; | ||
| 268 | + } | ||
| 269 | + | ||
| 270 | + const baseVendor = normalized.split('-')[0]; | ||
| 271 | + const distributionMap: Record<string, string> = { | ||
| 272 | + temurin: 'temurin', | ||
| 273 | + adoptopenjdk: 'temurin', | ||
| 274 | + zulu: 'zulu', | ||
| 275 | + corretto: 'corretto', | ||
| 276 | + liberica: 'liberica', | ||
| 277 | + microsoft: 'microsoft', | ||
| 278 | + semeru: 'semeru', | ||
| 279 | + ibm: 'semeru', | ||
| 280 | + dragonwell: 'dragonwell', | ||
| 281 | + graalvm: 'graalvm', | ||
| 282 | + oracle: 'oracle', | ||
| 283 | + sapmachine: 'sapmachine', | ||
| 284 | + kona: 'kona', | ||
| 285 | + jetbrains: 'jetbrains' | ||
| 286 | + }; | ||
| 287 | + | ||
| 288 | + const mapped = distributionMap[baseVendor]; | ||
| 289 | + if (!mapped) { | ||
| 290 | + core.warning( | ||
| 291 | + `Unknown asdf distribution identifier '${asdfDist}'. Please specify the distribution explicitly.` | ||
| 292 | + ); | ||
| 293 | + } | ||
| 294 | + return mapped; | ||
| 295 | + } | ||
| 296 | + | ||
| 241 | 297 | // By convention, action expects version 8 in the format `8.*` instead of `1.8` | |
| 242 | 298 | function avoidOldNotation(content: string): string { | |
| 243 | 299 | return content.startsWith('1.') ? content.substring(2) : content; | |
| Back | FazBrowse Home | New Git URL |
0 commit comments