diff --git a/lib/modules/datasource/terraform-provider/index.spec.ts b/lib/modules/datasource/terraform-provider/index.spec.ts index c5a8b69b796..191ab262b3d 100644 --- a/lib/modules/datasource/terraform-provider/index.spec.ts +++ b/lib/modules/datasource/terraform-provider/index.spec.ts @@ -18,64 +18,77 @@ const terraformProviderDatasource = new TerraformProviderDatasource(); const primaryUrl = terraformProviderDatasource.defaultRegistryUrls[0]; const secondaryUrl = terraformProviderDatasource.defaultRegistryUrls[1]; +type MockVariant = 'empty' | '404' | 'error'; + +function mockDefaultRegistryLookup(variant: MockVariant): void { + const primaryScope = httpMock + .scope(primaryUrl) + .get('/v1/providers/hashicorp/azurerm'); + const primarySd = httpMock + .scope(primaryUrl) + .get('/.well-known/terraform.json'); + const secondaryScope = httpMock + .scope(secondaryUrl) + .get('/terraform-provider-azurerm/index.json'); + + if (variant === 'empty') { + primaryScope.reply(200, {}); + primarySd.reply(200, serviceDiscoveryResult); + secondaryScope.reply(200, {}); + return; + } + + if (variant === '404') { + primaryScope.reply(404); + primarySd.reply(200, serviceDiscoveryResult); + secondaryScope.reply(404); + return; + } + + primaryScope.replyWithError(''); + primarySd.reply(200, serviceDiscoveryResult); + secondaryScope.replyWithError(''); +} + +function mockThirdPartyRegistryLookup(variant: MockVariant): void { + const scope = httpMock + .scope('https://registry.company.com') + .get('/v1/providers/hashicorp/azurerm/versions'); + + if (variant === 'empty') { + scope.reply(200, {}); + } else if (variant === '404') { + scope.reply(404); + } else { + scope.replyWithError(''); + } + + httpMock + .scope('https://registry.company.com') + .get('/.well-known/terraform.json') + .reply(200, serviceDiscoveryResult); +} + describe('modules/datasource/terraform-provider/index', () => { describe('getReleases', () => { - it('returns null for empty result', async () => { - httpMock - .scope(primaryUrl) - .get('/v1/providers/hashicorp/azurerm') - .reply(200, {}) - .get('/.well-known/terraform.json') - .reply(200, serviceDiscoveryResult); - httpMock - .scope(secondaryUrl) - .get('/terraform-provider-azurerm/index.json') - .reply(200, {}); - expect( - await getPkgReleases({ - datasource: TerraformProviderDatasource.id, - packageName: 'azurerm', - }), - ).toBeNull(); - }); + it.each` + description | variant + ${'empty results'} | ${'empty'} + ${'404 responses'} | ${'404'} + ${'unknown errors'} | ${'error'} + `( + 'returns null when both default registries return $description', + async ({ variant }) => { + mockDefaultRegistryLookup(variant); - it('returns null for 404', async () => { - httpMock - .scope(primaryUrl) - .get('/v1/providers/hashicorp/azurerm') - .reply(404) - .get('/.well-known/terraform.json') - .reply(200, serviceDiscoveryResult); - httpMock - .scope(secondaryUrl) - .get('/terraform-provider-azurerm/index.json') - .reply(404); - expect( - await getPkgReleases({ - datasource: TerraformProviderDatasource.id, - packageName: 'azurerm', - }), - ).toBeNull(); - }); - - it('returns null for unknown error', async () => { - httpMock - .scope(primaryUrl) - .get('/v1/providers/hashicorp/azurerm') - .replyWithError('') - .get('/.well-known/terraform.json') - .reply(200, serviceDiscoveryResult); - httpMock - .scope(secondaryUrl) - .get('/terraform-provider-azurerm/index.json') - .replyWithError(''); - expect( - await getPkgReleases({ - datasource: TerraformProviderDatasource.id, - packageName: 'azurerm', - }), - ).toBeNull(); - }); + expect( + await getPkgReleases({ + datasource: TerraformProviderDatasource.id, + packageName: 'azurerm', + }), + ).toBeNull(); + }, + ); it('processes real data', async () => { httpMock @@ -105,53 +118,49 @@ describe('modules/datasource/terraform-provider/index', () => { }); }); - it('returns null for empty result from third party', async () => { + it('does not set releaseTimestamp when latest version is not in releases', async () => { httpMock - .scope('https://registry.company.com') - .get('/v1/providers/hashicorp/azurerm/versions') - .reply(200, {}) + .scope(primaryUrl) + .get('/v1/providers/hashicorp/azurerm') + .reply(200, { + source: 'https://github.com/hashicorp/terraform-provider-azurerm', + versions: ['2.52.0'], + version: '9.9.9', + published_at: '2019-11-26T08:22:56Z', + }) .get('/.well-known/terraform.json') .reply(200, serviceDiscoveryResult); - expect( - await getPkgReleases({ - datasource: TerraformProviderDatasource.id, - packageName: 'azurerm', - registryUrls: ['https://registry.company.com'], - }), - ).toBeNull(); + const res = await getPkgReleases({ + datasource: TerraformProviderDatasource.id, + packageName: 'azurerm', + }); + expect(res).toEqual({ + homepage: 'https://registry.terraform.io/providers/hashicorp/azurerm', + registryUrl: 'https://registry.terraform.io', + releases: [{ version: '2.52.0' }], + sourceUrl: 'https://github.com/hashicorp/terraform-provider-azurerm', + }); }); - it('returns null for 404 from third party', async () => { - httpMock - .scope('https://registry.company.com') - .get('/v1/providers/hashicorp/azurerm/versions') - .reply(404) - .get('/.well-known/terraform.json') - .reply(200, serviceDiscoveryResult); - expect( - await getPkgReleases({ - datasource: TerraformProviderDatasource.id, - packageName: 'azurerm', - registryUrls: ['https://registry.company.com'], - }), - ).toBeNull(); - }); + it.each` + description | variant + ${'empty results'} | ${'empty'} + ${'404 responses'} | ${'404'} + ${'unknown errors'} | ${'error'} + `( + 'returns null when a third-party registry returns $description', + async ({ variant }) => { + mockThirdPartyRegistryLookup(variant); - it('returns null for unknown error from third party', async () => { - httpMock - .scope('https://registry.company.com') - .get('/v1/providers/hashicorp/azurerm/versions') - .replyWithError('') - .get('/.well-known/terraform.json') - .reply(200, serviceDiscoveryResult); - expect( - await getPkgReleases({ - datasource: TerraformProviderDatasource.id, - packageName: 'azurerm', - registryUrls: ['https://registry.company.com'], - }), - ).toBeNull(); - }); + expect( + await getPkgReleases({ + datasource: TerraformProviderDatasource.id, + packageName: 'azurerm', + registryUrls: ['https://registry.company.com'], + }), + ).toBeNull(); + }, + ); it('processes real data from third party', async () => { httpMock @@ -216,41 +225,6 @@ describe('modules/datasource/terraform-provider/index', () => { 'https://github.com/terraform-providers/terraform-provider-google-beta', }); }); - - it('simulate failing secondary release source', async () => { - httpMock - .scope(primaryUrl) - .get('/v1/providers/hashicorp/datadog') - .reply(404, { - errors: ['Not Found'], - }) - .get('/.well-known/terraform.json') - .reply(200, serviceDiscoveryResult); - httpMock - .scope(secondaryUrl) - .get('/terraform-provider-datadog/index.json') - .reply(404); - - const res = await getPkgReleases({ - datasource: TerraformProviderDatasource.id, - packageName: 'datadog', - }); - expect(res).toBeNull(); - }); - - it('returns null for error in service discovery', async () => { - httpMock.scope(primaryUrl).get('/.well-known/terraform.json').reply(404); - httpMock - .scope(secondaryUrl) - .get('/terraform-provider-azurerm/index.json') - .replyWithError(''); - expect( - await getPkgReleases({ - datasource: TerraformProviderDatasource.id, - packageName: 'azurerm', - }), - ).toBeNull(); - }); }); describe('getBuilds', () => { diff --git a/lib/modules/datasource/terraform-provider/index.ts b/lib/modules/datasource/terraform-provider/index.ts index dadd5879333..5a68c4ad29e 100644 --- a/lib/modules/datasource/terraform-provider/index.ts +++ b/lib/modules/datasource/terraform-provider/index.ts @@ -24,9 +24,12 @@ import type { export class TerraformProviderDatasource extends TerraformDatasource { static override readonly id = 'terraform-provider'; + static readonly hashicorpReleaseUrl = 'https://releases.hashicorp.com'; + static readonly terraformRegistryUrl = 'https://registry.terraform.io'; + static readonly defaultRegistryUrls = [ - 'https://registry.terraform.io', - 'https://releases.hashicorp.com', + TerraformProviderDatasource.terraformRegistryUrl, + TerraformProviderDatasource.hashicorpReleaseUrl, ]; static repositoryRegex = regEx(/^hashicorp\/(?\S+)$/); @@ -61,28 +64,24 @@ export class TerraformProviderDatasource extends TerraformDatasource { `terraform-provider.getDependencies() packageName: ${packageName}`, ); - if (registryUrl === this.defaultRegistryUrls[1]) { - return await this.queryReleaseBackend(packageName, registryUrl); - } - const repository = TerraformProviderDatasource.getRepository({ - packageName, - }); - const serviceDiscovery = - await this.getTerraformServiceDiscoveryResult(registryUrl); - - if (registryUrl === this.defaultRegistryUrls[0]) { - return await this.queryRegistryExtendedApi( + if (registryUrl === TerraformProviderDatasource.terraformRegistryUrl) { + const repository = TerraformProviderDatasource.getRepository({ + packageName, + }); + const serviceDiscovery = + await this.getTerraformServiceDiscoveryResult(registryUrl); + return await this.queryTerraformRegistry( serviceDiscovery, registryUrl, repository, ); } + if (registryUrl === TerraformProviderDatasource.hashicorpReleaseUrl) { + return await this.queryReleaseBackend(packageName, registryUrl); + } - return await this.queryRegistryVersions( - serviceDiscovery, - registryUrl, - repository, - ); + // Fall back to the standard Provider Registry Protocol for other registries. + return await this.queryProviderRegistry(registryUrl, packageName); } getReleases(config: GetReleasesConfig): Promise { @@ -103,11 +102,11 @@ export class TerraformProviderDatasource extends TerraformDatasource { } /** - * this uses the api that terraform registry has in addition to the base api - * this endpoint provides more information, such as release date - * this api is undocumented. + * Query the Terraform Registry using the undocumented extended provider API. + * This provides more information than the base Provider Registry Protocol, + * such as the release date for the latest version and the source URL. */ - private async queryRegistryExtendedApi( + private async queryTerraformRegistry( serviceDiscovery: ServiceDiscoveryResult, registryUrl: string, repository: string, @@ -141,14 +140,19 @@ export class TerraformProviderDatasource extends TerraformDatasource { } /** - * this version uses the Provider Registry Protocol that all registries are required to implement + * Query a registry using the Provider Registry Protocol that all registries + * are required to implement. * https://www.terraform.io/internals/provider-registry-protocol */ - private async queryRegistryVersions( - serviceDiscovery: ServiceDiscoveryResult, + private async queryProviderRegistry( registryUrl: string, - repository: string, + packageName: string, ): Promise { + const repository = TerraformProviderDatasource.getRepository({ + packageName, + }); + const serviceDiscovery: ServiceDiscoveryResult = + await this.getTerraformServiceDiscoveryResult(registryUrl); const backendURL = createSDBackendURL( registryUrl, 'providers.v1', @@ -200,7 +204,7 @@ export class TerraformProviderDatasource extends TerraformDatasource { repository: string, version: string, ): Promise { - if (registryURL === TerraformProviderDatasource.defaultRegistryUrls[1]) { + if (registryURL === TerraformProviderDatasource.hashicorpReleaseUrl) { // check if registryURL === secondary backend const repositoryRegexResult = TerraformProviderDatasource.repositoryRegex.exec(repository)?.groups; @@ -356,7 +360,7 @@ export class TerraformProviderDatasource extends TerraformDatasource { ): Promise { return ( await this.http.getJsonUnchecked( - `${TerraformProviderDatasource.defaultRegistryUrls[1]}/${backendLookUpName}/${version}/index.json`, + `${TerraformProviderDatasource.hashicorpReleaseUrl}/${backendLookUpName}/${version}/index.json`, ) ).body; } diff --git a/package.json b/package.json index 05199bef904..7e8d6ed7d74 100644 --- a/package.json +++ b/package.json @@ -352,7 +352,7 @@ "semantic-release": "25.0.3", "tar": "7.5.13", "tmp-promise": "3.0.3", - "tsdown": "0.21.5", + "tsdown": "0.21.6", "type-fest": "5.5.0", "typescript": "5.9.3", "typescript-eslint": "8.57.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3b2e729999d..d6a228aadda 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -586,8 +586,8 @@ importers: specifier: 3.0.3 version: 3.0.3 tsdown: - specifier: 0.21.5 - version: 0.21.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(typescript@5.9.3) + specifier: 0.21.6 + version: 0.21.6(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(typescript@5.9.3) type-fest: specifier: 5.5.0 version: 5.5.0 @@ -859,8 +859,8 @@ packages: resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} - '@babel/generator@8.0.0-rc.2': - resolution: {integrity: sha512-oCQ1IKPwkzCeJzAPb7Fv8rQ9k5+1sG8mf2uoHiMInPYvkRfrDJxbTIbH51U+jstlkghus0vAi3EBvkfvEsYNLQ==} + '@babel/generator@8.0.0-rc.3': + resolution: {integrity: sha512-em37/13/nR320G4jab/nIIHZgc2Wz2y/D39lxnTyxB4/D/omPQncl/lSdlnJY1OhQcRGugTSIF2l/69o31C9dA==} engines: {node: ^20.19.0 || >=22.12.0} '@babel/helper-compilation-targets@7.28.6': @@ -893,8 +893,8 @@ packages: resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@8.0.0-rc.2': - resolution: {integrity: sha512-xExUBkuXWJjVuIbO7z6q7/BA9bgfJDEhVL0ggrggLMbg0IzCUWGT1hZGE8qUH7Il7/RD/a6cZ3AAFrrlp1LF/A==} + '@babel/helper-validator-identifier@8.0.0-rc.3': + resolution: {integrity: sha512-8AWCJ2VJJyDFlGBep5GpaaQ9AAaE/FjAcrqI7jyssYhtL7WGV0DOKpJsQqM037xDbpRLHXsY8TwU7zDma7coOw==} engines: {node: ^20.19.0 || >=22.12.0} '@babel/helper-validator-option@7.27.1': @@ -910,8 +910,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@8.0.0-rc.2': - resolution: {integrity: sha512-29AhEtcq4x8Dp3T72qvUMZHx0OMXCj4Jy/TEReQa+KWLln524Cj1fWb3QFi0l/xSpptQBR6y9RNEXuxpFvwiUQ==} + '@babel/parser@8.0.0-rc.3': + resolution: {integrity: sha512-B20dvP3MfNc/XS5KKCHy/oyWl5IA6Cn9YjXRdDlCjNmUFrjvLXMNUfQq/QUy9fnG2gYkKKcrto2YaF9B32ToOQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -931,8 +931,8 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@babel/types@8.0.0-rc.2': - resolution: {integrity: sha512-91gAaWRznDwSX4E2tZ1YjBuIfnQVOFDCQ2r0Toby0gu4XEbyF623kXLMA8d4ZbCu+fINcrudkmEcwSUHgDDkNw==} + '@babel/types@8.0.0-rc.3': + resolution: {integrity: sha512-mOm5ZrYmphGfqVWoH5YYMTITb3cDXsFgmvFlvkvWDMsR9X8RFnt7a0Wb6yNIdoFsiMO9WjYLq+U/FMtqIYAF8Q==} engines: {node: ^20.19.0 || >=22.12.0} '@baszalmstra/rattler@0.2.1': @@ -1976,12 +1976,6 @@ packages: resolution: {integrity: sha512-zTK2X2r6fQTgQ1lqM0jaF/MgxmXCp0UrfiE1Ks3rQOBQjci4Xez1Zzsy4MgtjhMiHcdDi4lbBvtlPnksvEU8GQ==} engines: {node: ^20.9.0 || ^22.11.0 || ^24, pnpm: ^10.0.0} - '@rolldown/binding-android-arm64@1.0.0-rc.11': - resolution: {integrity: sha512-SJ+/g+xNnOh6NqYxD0V3uVN4W3VfnrGsC9/hoglicgTNfABFG9JjISvkkU0dNY84MNHLWyOgxP9v9Y9pX4S7+A==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - '@rolldown/binding-android-arm64@1.0.0-rc.12': resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1994,12 +1988,6 @@ packages: cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.11': - resolution: {integrity: sha512-7WQgR8SfOPwmDZGFkThUvsmd/nwAWv91oCO4I5LS7RKrssPZmOt7jONN0cW17ydGC1n/+puol1IpoieKqQidmg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.0-rc.12': resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2012,12 +2000,6 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.11': - resolution: {integrity: sha512-39Ks6UvIHq4rEogIfQBoBRusj0Q0nPVWIvqmwBLaT6aqQGIakHdESBVOPRRLacy4WwUPIx4ZKzfZ9PMW+IeyUQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.12': resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2030,12 +2012,6 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.11': - resolution: {integrity: sha512-jfsm0ZHfhiqrvWjJAmzsqiIFPz5e7mAoCOPBNTcNgkiid/LaFKiq92+0ojH+nmJmKYkre4t71BWXUZDNp7vsag==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.0-rc.12': resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2048,12 +2024,6 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.11': - resolution: {integrity: sha512-zjQaUtSyq1nVe3nxmlSCuR96T1LPlpvmJ0SZy0WJFEsV4kFbXcq2u68L4E6O0XeFj4aex9bEauqjW8UQBeAvfQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2066,13 +2036,6 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.11': - resolution: {integrity: sha512-WMW1yE6IOnehTcFE9eipFkm3XN63zypWlrJQ2iF7NrQ9b2LDRjumFoOGJE8RJJTJCTBAdmLMnJ8uVitACUUo1Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2087,13 +2050,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.11': - resolution: {integrity: sha512-jfndI9tsfm4APzjNt6QdBkYwre5lRPUgHeDHoI7ydKUuJvz3lZeCfMsI56BZj+7BYqiKsJm7cfd/6KYV7ubrBg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2108,13 +2064,6 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.11': - resolution: {integrity: sha512-ZlFgw46NOAGMgcdvdYwAGu2Q+SLFA9LzbJLW+iyMOJyhj5wk6P3KEE9Gct4xWwSzFoPI7JCdYmYMzVtlgQ+zfw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2129,13 +2078,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.11': - resolution: {integrity: sha512-hIOYmuT6ofM4K04XAZd3OzMySEO4K0/nc9+jmNcxNAxRi6c5UWpqfw3KMFV4MVFWL+jQsSh+bGw2VqmaPMTLyw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2150,13 +2092,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.11': - resolution: {integrity: sha512-qXBQQO9OvkjjQPLdUVr7Nr2t3QTZI7s4KZtfw7HzBgjbmAPSFwSv4rmET9lLSgq3rH/ndA3ngv3Qb8l2njoPNA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2171,13 +2106,6 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.11': - resolution: {integrity: sha512-/tpFfoSTzUkH9LPY+cYbqZBDyyX62w5fICq9qzsHLL8uTI6BHip3Q9Uzft0wylk/i8OOwKik8OxW+QAhDmzwmg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2192,12 +2120,6 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.11': - resolution: {integrity: sha512-mcp3Rio2w72IvdZG0oQ4bM2c2oumtwHfUfKncUM6zGgz0KgPz4YmDPQfnXEiY5t3+KD/i8HG2rOB/LxdmieK2g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2210,11 +2132,6 @@ packages: cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.11': - resolution: {integrity: sha512-LXk5Hii1Ph9asuGRjBuz8TUxdc1lWzB7nyfdoRgI0WGPZKmCxvlKk8KfYysqtr4MfGElu/f/pEQRh8fcEgkrWw==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==} engines: {node: '>=14.0.0'} @@ -2225,12 +2142,6 @@ packages: engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.11': - resolution: {integrity: sha512-dDwf5otnx0XgRY1yqxOC4ITizcdzS/8cQ3goOWv3jFAo4F+xQYni+hnMuO6+LssHHdJW7+OCVL3CoU4ycnh35Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2243,12 +2154,6 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.11': - resolution: {integrity: sha512-LN4/skhSggybX71ews7dAj6r2geaMJfm3kMbK2KhFMg9B10AZXnKoLCVVgzhMHL0S+aKtr4p8QbAW8k+w95bAA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2261,9 +2166,6 @@ packages: cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.11': - resolution: {integrity: sha512-xQO9vbwBecJRv9EUcQ/y0dzSTJgA7Q6UVN7xp6B81+tBGSLVAK03yJ9NkJaUA7JFD91kbjxRSC/mDnmvXzbHoQ==} - '@rolldown/pluginutils@1.0.0-rc.12': resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} @@ -5586,14 +5488,14 @@ packages: resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} engines: {node: '>=8.0'} - rolldown-plugin-dts@0.22.5: - resolution: {integrity: sha512-M/HXfM4cboo+jONx9Z0X+CUf3B5tCi7ni+kR5fUW50Fp9AlZk0oVLesibGWgCXDKFp5lpgQ9yhKoImUFjl3VZw==} + rolldown-plugin-dts@0.23.2: + resolution: {integrity: sha512-PbSqLawLgZBGcOGT3yqWBGn4cX+wh2nt5FuBGdcMHyOhoukmjbhYAl8NT9sE4U38Cm9tqLOIQeOrvzeayM0DLQ==} engines: {node: '>=20.19.0'} peerDependencies: '@ts-macro/tsc': ^0.3.6 - '@typescript/native-preview': '>=7.0.0-dev.20250601.1' - rolldown: ^1.0.0-rc.3 - typescript: ^5.0.0 || ^6.0.0-beta + '@typescript/native-preview': '>=7.0.0-dev.20260325.1' + rolldown: ^1.0.0-rc.12 + typescript: ^5.0.0 || ^6.0.0 vue-tsc: ~3.2.0 peerDependenciesMeta: '@ts-macro/tsc': @@ -5605,11 +5507,6 @@ packages: vue-tsc: optional: true - rolldown@1.0.0-rc.11: - resolution: {integrity: sha512-NRjoKMusSjfRbSYiH3VSumlkgFe7kYAa3pzVOsVYVFY3zb5d7nS+a3KGQ7hJKXuYWbzJKPVQ9Wxq2UvyK+ENpw==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - rolldown@1.0.0-rc.12: resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6046,14 +5943,14 @@ packages: typescript: optional: true - tsdown@0.21.5: - resolution: {integrity: sha512-TlgNhfPioAD6ECCUnZsxcUsXXuPPR4Rrxz3az741kL/M3oGIET4a9GajSNRNRx+jIva73TYUKQybrEPkDYN+fQ==} + tsdown@0.21.6: + resolution: {integrity: sha512-YsgPuWczqxPkXiJwMPrv3eOiqx4KPhOdksqubVCDhS7lChK3RYlWsEGhZixc0+lqN3fmBYEnETaujEWDpMPZmA==} engines: {node: '>=20.19.0'} hasBin: true peerDependencies: '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.21.5 - '@tsdown/exe': 0.21.5 + '@tsdown/css': 0.21.6 + '@tsdown/exe': 0.21.6 '@vitejs/devtools': '*' publint: ^0.3.0 typescript: ^5.0.0 || ^6.0.0 @@ -7328,10 +7225,10 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/generator@8.0.0-rc.2': + '@babel/generator@8.0.0-rc.3': dependencies: - '@babel/parser': 8.0.0-rc.2 - '@babel/types': 8.0.0-rc.2 + '@babel/parser': 8.0.0-rc.3 + '@babel/types': 8.0.0-rc.3 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 '@types/jsesc': 2.5.1 @@ -7369,7 +7266,7 @@ snapshots: '@babel/helper-validator-identifier@7.28.5': {} - '@babel/helper-validator-identifier@8.0.0-rc.2': {} + '@babel/helper-validator-identifier@8.0.0-rc.3': {} '@babel/helper-validator-option@7.27.1': {} @@ -7382,9 +7279,9 @@ snapshots: dependencies: '@babel/types': 7.29.0 - '@babel/parser@8.0.0-rc.2': + '@babel/parser@8.0.0-rc.3': dependencies: - '@babel/types': 8.0.0-rc.2 + '@babel/types': 8.0.0-rc.3 '@babel/runtime-corejs3@7.29.2': dependencies: @@ -7413,10 +7310,10 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@babel/types@8.0.0-rc.2': + '@babel/types@8.0.0-rc.3': dependencies: '@babel/helper-string-parser': 8.0.0-rc.3 - '@babel/helper-validator-identifier': 8.0.0-rc.2 + '@babel/helper-validator-identifier': 8.0.0-rc.3 '@baszalmstra/rattler@0.2.1': {} @@ -8328,122 +8225,78 @@ snapshots: '@renovatebot/ruby-semver@4.1.2': {} - '@rolldown/binding-android-arm64@1.0.0-rc.11': - optional: true - '@rolldown/binding-android-arm64@1.0.0-rc.12': optional: true '@rolldown/binding-android-arm64@1.0.0-rc.8': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.11': - optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.12': optional: true '@rolldown/binding-darwin-arm64@1.0.0-rc.8': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.11': - optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.12': optional: true '@rolldown/binding-darwin-x64@1.0.0-rc.8': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.11': - optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.12': optional: true '@rolldown/binding-freebsd-x64@1.0.0-rc.8': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.11': - optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.8': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.11': - optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.8': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.11': - optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': optional: true '@rolldown/binding-linux-arm64-musl@1.0.0-rc.8': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.11': - optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': optional: true '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.8': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.11': - optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': optional: true '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.8': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.11': - optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': optional: true '@rolldown/binding-linux-x64-gnu@1.0.0-rc.8': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.11': - optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': optional: true '@rolldown/binding-linux-x64-musl@1.0.0-rc.8': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.11': - optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': optional: true '@rolldown/binding-openharmony-arm64@1.0.0-rc.8': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.11(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': - dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': dependencies: '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) @@ -8460,26 +8313,18 @@ snapshots: - '@emnapi/runtime' optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.11': - optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.8': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.11': - optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': optional: true '@rolldown/binding-win32-x64-msvc@1.0.0-rc.8': optional: true - '@rolldown/pluginutils@1.0.0-rc.11': {} - '@rolldown/pluginutils@1.0.0-rc.12': {} '@rolldown/pluginutils@1.0.0-rc.8': {} @@ -9450,7 +9295,7 @@ snapshots: ast-kit@3.0.0-beta.1: dependencies: - '@babel/parser': 8.0.0-rc.2 + '@babel/parser': 8.0.0-rc.3 estree-walker: 3.0.3 pathe: 2.0.3 @@ -12286,47 +12131,24 @@ snapshots: semver-compare: 1.0.0 sprintf-js: 1.1.3 - rolldown-plugin-dts@0.22.5(rolldown@1.0.0-rc.11(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(typescript@5.9.3): + rolldown-plugin-dts@0.23.2(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(typescript@5.9.3): dependencies: - '@babel/generator': 8.0.0-rc.2 - '@babel/helper-validator-identifier': 8.0.0-rc.2 - '@babel/parser': 8.0.0-rc.2 - '@babel/types': 8.0.0-rc.2 + '@babel/generator': 8.0.0-rc.3 + '@babel/helper-validator-identifier': 8.0.0-rc.3 + '@babel/parser': 8.0.0-rc.3 + '@babel/types': 8.0.0-rc.3 ast-kit: 3.0.0-beta.1 birpc: 4.0.0 dts-resolver: 2.1.3 get-tsconfig: 4.13.7 obug: 2.1.1 - rolldown: 1.0.0-rc.11(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + picomatch: 4.0.4 + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - oxc-resolver - rolldown@1.0.0-rc.11(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): - dependencies: - '@oxc-project/types': 0.122.0 - '@rolldown/pluginutils': 1.0.0-rc.11 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.11 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.11 - '@rolldown/binding-darwin-x64': 1.0.0-rc.11 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.11 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.11 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.11 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.11 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.11 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.11 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.11 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.11 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.11 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.11(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.11 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.11 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): dependencies: '@oxc-project/types': 0.122.0 @@ -12823,7 +12645,7 @@ snapshots: optionalDependencies: typescript: 5.9.3 - tsdown@0.21.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(typescript@5.9.3): + tsdown@0.21.6(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(typescript@5.9.3): dependencies: ansis: 4.2.0 cac: 7.0.0 @@ -12833,8 +12655,8 @@ snapshots: import-without-cache: 0.2.5 obug: 2.1.1 picomatch: 4.0.4 - rolldown: 1.0.0-rc.11(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - rolldown-plugin-dts: 0.22.5(rolldown@1.0.0-rc.11(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(typescript@5.9.3) + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(typescript@5.9.3) semver: 7.7.4 tinyexec: 1.0.4 tinyglobby: 0.2.15