diff --git a/CHANGELOG.v2.alpha.md b/CHANGELOG.v2.alpha.md index 3f2bd2190bd3f..71e33d6d89bd4 100644 --- a/CHANGELOG.v2.alpha.md +++ b/CHANGELOG.v2.alpha.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.171.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.170.0-alpha.0...v2.171.0-alpha.0) (2024-11-25) + ## [2.170.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.169.0-alpha.0...v2.170.0-alpha.0) (2024-11-22) ## [2.169.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.168.0-alpha.0...v2.169.0-alpha.0) (2024-11-21) diff --git a/CHANGELOG.v2.md b/CHANGELOG.v2.md index 2dece5608e88e..322437a6e0eb4 100644 --- a/CHANGELOG.v2.md +++ b/CHANGELOG.v2.md @@ -2,6 +2,19 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.171.0](https://github.com/aws/aws-cdk/compare/v2.170.0...v2.171.0) (2024-11-25) + + +### Features + +* **rds:** enhanced monitoring configuration at the cluster level ([#32157](https://github.com/aws/aws-cdk/issues/32157)) ([01f2dcd](https://github.com/aws/aws-cdk/commit/01f2dcd6fb892905afae735c791ddbb3e6adbcb1)), closes [#32151](https://github.com/aws/aws-cdk/issues/32151) +* **rds:** support zero ACU for Aurora Serverless V2 ([#32231](https://github.com/aws/aws-cdk/issues/32231)) ([d1b07d9](https://github.com/aws/aws-cdk/commit/d1b07d9aeadab65db5672272050e64672e7d6beb)) + + +### Bug Fixes + +* **cli:** sso with proxy fails ([#32261](https://github.com/aws/aws-cdk/issues/32261)) ([bedcf16](https://github.com/aws/aws-cdk/commit/bedcf164a2b7cbd613ac645d477302c93ddfa4b6)) + ## [2.170.0](https://github.com/aws/aws-cdk/compare/v2.169.0...v2.170.0) (2024-11-22) diff --git a/packages/@aws-cdk/cloudformation-diff/package.json b/packages/@aws-cdk/cloudformation-diff/package.json index 756e796b4460a..de9464d069e79 100644 --- a/packages/@aws-cdk/cloudformation-diff/package.json +++ b/packages/@aws-cdk/cloudformation-diff/package.json @@ -23,8 +23,8 @@ }, "license": "Apache-2.0", "dependencies": { - "@aws-cdk/aws-service-spec": "^0.1.34", - "@aws-cdk/service-spec-types": "^0.0.101", + "@aws-cdk/aws-service-spec": "^0.1.35", + "@aws-cdk/service-spec-types": "^0.0.102", "chalk": "^4", "diff": "^5.2.0", "fast-deep-equal": "^3.1.3", diff --git a/packages/@aws-cdk/integ-runner/package.json b/packages/@aws-cdk/integ-runner/package.json index 9797bad38c2ea..09013489956cf 100644 --- a/packages/@aws-cdk/integ-runner/package.json +++ b/packages/@aws-cdk/integ-runner/package.json @@ -74,7 +74,7 @@ "@aws-cdk/cloud-assembly-schema": "^38.0.0", "@aws-cdk/cloudformation-diff": "0.0.0", "@aws-cdk/cx-api": "0.0.0", - "@aws-cdk/aws-service-spec": "^0.1.34", + "@aws-cdk/aws-service-spec": "^0.1.35", "cdk-assets": "3.0.0-rc.32", "@aws-cdk/cdk-cli-wrapper": "0.0.0", "aws-cdk": "0.0.0", diff --git a/packages/aws-cdk-lib/aws-lambda-event-sources/lib/stream.ts b/packages/aws-cdk-lib/aws-lambda-event-sources/lib/stream.ts index f65cb6a9852a1..44c6076c4e65a 100644 --- a/packages/aws-cdk-lib/aws-lambda-event-sources/lib/stream.ts +++ b/packages/aws-cdk-lib/aws-lambda-event-sources/lib/stream.ts @@ -54,6 +54,9 @@ export interface BaseStreamEventSourceProps{ readonly provisionedPollerConfig?: ProvisionedPollerConfig; } +/** + * (Amazon MSK and self-managed Apache Kafka only) The provisioned mode configuration for the event source. + */ export interface ProvisionedPollerConfig { /** * The minimum number of pollers that should be provisioned. diff --git a/packages/aws-cdk-lib/aws-lambda/lib/event-source-mapping.ts b/packages/aws-cdk-lib/aws-lambda/lib/event-source-mapping.ts index fe4f4cc78b88f..a673d6282dc1a 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/event-source-mapping.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/event-source-mapping.ts @@ -81,6 +81,9 @@ export interface SourceAccessConfiguration { readonly uri: string; } +/** + * (Amazon MSK and self-managed Apache Kafka only) The provisioned mode configuration for the event source. + */ export interface ProvisionedPollerConfig { /** * The minimum number of pollers that should be provisioned. diff --git a/packages/aws-cdk-lib/aws-rds/lib/instance-engine.ts b/packages/aws-cdk-lib/aws-rds/lib/instance-engine.ts index b2b81c1ce4d1a..7ad50a23e3dce 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/instance-engine.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/instance-engine.ts @@ -950,6 +950,8 @@ export class MysqlEngineVersion { public static readonly VER_8_0_39 = MysqlEngineVersion.of('8.0.39', '8.0'); /** Version "8.0.40". */ public static readonly VER_8_0_40 = MysqlEngineVersion.of('8.0.40', '8.0'); + /** Version "8.4.3". */ + public static readonly VER_8_4_3 = MysqlEngineVersion.of('8.4.3', '8.0'); /** * Create a new MysqlEngineVersion with an arbitrary version. diff --git a/packages/aws-cdk-lib/awslint.json b/packages/aws-cdk-lib/awslint.json index 465f57aceeeef..528f143682a16 100644 --- a/packages/aws-cdk-lib/awslint.json +++ b/packages/aws-cdk-lib/awslint.json @@ -405,18 +405,6 @@ "docs-public-apis:aws-cdk-lib.aws_lambda_event_sources.S3EventSource.bucket", "docs-public-apis:aws-cdk-lib.aws_lambda_event_sources.SnsEventSource.topic", "docs-public-apis:aws-cdk-lib.aws_lambda_event_sources.SqsEventSource.queue", - "docs-public-apis:aws-cdk-lib.aws_lambda.EventSourceMappingOptions.provisionedPollerConfig", - "props-default-doc:aws-cdk-lib.aws_lambda.EventSourceMappingOptions.provisionedPollerConfig", - "docs-public-apis:aws-cdk-lib.aws_lambda.ProvisionedPollerConfig", - "docs-public-apis:aws-cdk-lib.aws_lambda.ProvisionedPollerConfig.maximumPollers", - "docs-public-apis:aws-cdk-lib.aws_lambda.ProvisionedPollerConfig.minimumPollers", - "props-default-doc:aws-cdk-lib.aws_lambda.ProvisionedPollerConfig.maximumPollers", - "props-default-doc:aws-cdk-lib.aws_lambda.ProvisionedPollerConfig.minimumPollers", - "docs-public-apis:aws-cdk-lib.aws_lambda_event_sources.KafkaEventSourceProps.provisionedPollerConfig", - "props-default-doc:aws-cdk-lib.aws_lambda_event_sources.KafkaEventSourceProps.provisionedPollerConfig", - "docs-public-apis:aws-cdk-lib.aws_lambda_event_sources.ProvisionedPollerConfig", - "docs-public-apis:aws-cdk-lib.aws_lambda_event_sources.ProvisionedPollerConfig.maximumPollers", - "docs-public-apis:aws-cdk-lib.aws_lambda_event_sources.ProvisionedPollerConfig.minimumPollers", "docs-public-apis:aws-cdk-lib.aws_logs.CrossAccountDestination.addToPolicy", "docs-public-apis:aws-cdk-lib.aws_logs.DataIdentifier.*", "docs-public-apis:aws-cdk-lib.aws_logs.JsonPattern.jsonPatternString", diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index d9a344a514954..0bca79c939ac4 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -136,7 +136,7 @@ "mime-types": "^2.1.35" }, "devDependencies": { - "@aws-cdk/aws-service-spec": "^0.1.34", + "@aws-cdk/aws-service-spec": "^0.1.35", "@aws-cdk/cdk-build-tools": "0.0.0", "@aws-cdk/custom-resource-handlers": "0.0.0", "@aws-cdk/pkglint": "0.0.0", diff --git a/packages/aws-cdk/jest.config.js b/packages/aws-cdk/jest.config.js index a6aa99d846bfa..61272d3567108 100644 --- a/packages/aws-cdk/jest.config.js +++ b/packages/aws-cdk/jest.config.js @@ -20,6 +20,5 @@ module.exports = { // We have many tests here that commonly time out testTimeout: 30_000, - // These tests are too chatty. Shush. - silent: true, + setupFilesAfterEnv: ["/test/jest-setup-after-env.ts"], }; diff --git a/packages/aws-cdk/lib/init.ts b/packages/aws-cdk/lib/init.ts index a6ab13638accf..d119f3b78cc0a 100644 --- a/packages/aws-cdk/lib/init.ts +++ b/packages/aws-cdk/lib/init.ts @@ -324,13 +324,9 @@ async function initializeProject( if (migrate) { await template.addMigrateContext(workDir); } - if (await fs.pathExists('README.md')) { - const readme = await fs.readFile('README.md', { encoding: 'utf-8' }); - // Save the logs! - // Without this statement, the readme of the CLI is printed in every init test - if (!readme.startsWith('# AWS CDK Toolkit')) { - print(chalk.green(readme)); - } + if (await fs.pathExists(`${workDir}/README.md`)) { + const readme = await fs.readFile(`${workDir}/README.md`, { encoding: 'utf-8' }); + print(chalk.green(readme)); } if (!generateOnly) { diff --git a/packages/aws-cdk/test/diff.test.ts b/packages/aws-cdk/test/diff.test.ts index 8c608fe96e625..6e3cfd0c3289d 100644 --- a/packages/aws-cdk/test/diff.test.ts +++ b/packages/aws-cdk/test/diff.test.ts @@ -1,4 +1,6 @@ import * as fs from 'fs'; +import * as os from 'os'; +import * as path from 'path'; import { Writable } from 'stream'; import { StringDecoder } from 'string_decoder'; import * as cxschema from '@aws-cdk/cloud-assembly-schema'; @@ -12,6 +14,22 @@ import { CdkToolkit } from '../lib/cdk-toolkit'; let cloudExecutable: MockCloudExecutable; let cloudFormation: jest.Mocked; let toolkit: CdkToolkit; +let oldDir: string; +let tmpDir: string; + +beforeAll(() => { + // The toolkit writes and checks for temporary files in the current directory, + // so run these tests in a tempdir so they don't interfere with each other + // and other tests. + oldDir = process.cwd(); + tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'aws-cdk-test')); + process.chdir(tmpDir); +}); + +afterAll(() => { + process.chdir(oldDir); + fs.rmSync(tmpDir, { recursive: true, force: true }); +}); describe('fixed template', () => { const templatePath = 'oldTemplate.json'; diff --git a/packages/aws-cdk/test/init.test.ts b/packages/aws-cdk/test/init.test.ts index 6d9bd2dc4769b..02a94f4addf70 100644 --- a/packages/aws-cdk/test/init.test.ts +++ b/packages/aws-cdk/test/init.test.ts @@ -2,7 +2,7 @@ import * as os from 'os'; import * as path from 'path'; import * as cxapi from '@aws-cdk/cx-api'; import * as fs from 'fs-extra'; -import { availableInitTemplates, cliInit } from '../lib/init'; +import { availableInitLanguages, availableInitTemplates, cliInit, printAvailableTemplates } from '../lib/init'; describe('constructs version', () => { cliTest('create a TypeScript library project', async (workDir) => { @@ -17,6 +17,21 @@ describe('constructs version', () => { expect(await fs.pathExists(path.join(workDir, 'lib'))).toBeTruthy(); }); + cliTest('asking for a nonexistent template fails', async (workDir) => { + await expect(cliInit({ + type: 'banana', + language: 'typescript', + workDir, + })).rejects.toThrow(/Unknown init template/); + }); + + cliTest('asking for a template but no language prints and throws', async (workDir) => { + await expect(cliInit({ + type: 'app', + workDir, + })).rejects.toThrow(/No language/); + }); + cliTest('create a TypeScript app project', async (workDir) => { await cliInit({ type: 'app', @@ -237,6 +252,16 @@ test('when no version number is present (e.g., local development), the v2 templa expect((await availableInitTemplates()).length).toBeGreaterThan(0); }); +test('check available init languages', async () => { + const langs = await availableInitLanguages(); + expect(langs.length).toBeGreaterThan(0); + expect(langs).toContain('typescript'); +}); + +test('exercise printing available templates', async () => { + await printAvailableTemplates(); +}); + function cliTest(name: string, handler: (dir: string) => void | Promise): void { test(name, () => withTempDir(handler)); } diff --git a/packages/aws-cdk/test/jest-setup-after-env.ts b/packages/aws-cdk/test/jest-setup-after-env.ts new file mode 100644 index 0000000000000..b731f0c0e66f0 --- /dev/null +++ b/packages/aws-cdk/test/jest-setup-after-env.ts @@ -0,0 +1,85 @@ +import * as fs from 'fs'; +import * as os from 'os'; +import * as path from 'path'; +import { isPromise } from 'util/types'; + +/** + * Global test setup for Jest tests + * + * It's easy to accidentally write tests that interfere with each other by + * writing files to disk in the "current directory". To prevent this, the global + * test setup creates a directory in the temporary directory and chmods it to + * being non-writable. That way, whenever a test tries to write to the current + * directory, it will produce an error and we'll be able to find and fix the + * test. + * + * If you see `EACCES: permission denied`, you have a test that creates files + * in the current directory, and you should be sure to do it in a temporary + * directory that you clean up afterwards. + * + * ## Alternate approach + * + * I tried an approach where I would automatically try to create and clean up + * temp directories for every test, but it was introducing too many conflicts + * with existing test behavior (around specific ordering of temp directory + * creation and cleanup tasks that are already present) in many places that I + * didn't want to go and chase down. + * + */ + +let tmpDir: string; +let oldDir: string; + +beforeAll(() => { + tmpDir = path.join(os.tmpdir(), 'cdk-nonwritable-on-purpose'); + fs.mkdirSync(tmpDir, { recursive: true }); + fs.chmodSync(tmpDir, 0o500); + oldDir = process.cwd(); + process.chdir(tmpDir); + tmpDir = process.cwd(); // This will have resolved symlinks +}); + +const reverseAfterAll: Array = []; + +/** + * We need a cleanup here + * + * 99% of the time, Jest runs the tests in a subprocess and this isn't + * necessary because we would have `chdir`ed in the subprocess. + * + * But sometimes we ask Jest with `-i` to run the tests in the main process, + * or if you only ask for a single test suite Jest runs the tests in the main + * process, and then we `chdir`ed the main process away. + * + * Jest will then try to write the `coverage` directory to the readonly directory, + * and fail. Chdir back to the original dir. + * + * If the test file has an `afterAll()` hook it installed as well, we need to run + * it before our cleanup, otherwise the wrong thing will happen (by default, + * all `afterAll()`s run in call order, but they should be run in reverse). + */ +afterAll(async () => { + for (const aft of reverseAfterAll.reverse()) { + await new Promise((resolve, reject) => { + const response = aft(resolve as any); + if (isPromise(response)) { + response.then(() => { return resolve(); }, reject); + } else { + resolve(); + } + }); + } + + // eslint-disable-next-line no-console + process.stderr.write(`${process.cwd()}, ${tmpDir}\n`); + if (process.cwd() === tmpDir) { + // eslint-disable-next-line no-console + process.stderr.write('chmod\n'); + process.chdir(oldDir); + } +}); + +// Patch afterAll to make later-provided afterAll's run before us (in reverse order even). +afterAll = (after: jest.ProvidesHookCallback) => { + reverseAfterAll.push(after); +}; \ No newline at end of file diff --git a/packages/aws-cdk/test/notices.test.ts b/packages/aws-cdk/test/notices.test.ts index acc1fae841173..8acac0ff9b9cb 100644 --- a/packages/aws-cdk/test/notices.test.ts +++ b/packages/aws-cdk/test/notices.test.ts @@ -455,23 +455,20 @@ describe(CachedDataSource, () => { }); test('retrieves data from the delegate when the file cannot be read', async () => { - const debugSpy = jest.spyOn(logging, 'debug'); + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'cdk-test')); + try { + const debugSpy = jest.spyOn(logging, 'debug'); - if (fs.existsSync('does-not-exist.json')) { - fs.unlinkSync('does-not-exist.json'); - } - - const dataSource = dataSourceWithDelegateReturning(freshData, 'does-not-exist.json'); + const dataSource = dataSourceWithDelegateReturning(freshData, `${tmpDir}/does-not-exist.json`); - const notices = await dataSource.fetch(); - - expect(notices).toEqual(freshData); - expect(debugSpy).not.toHaveBeenCalled(); + const notices = await dataSource.fetch(); - debugSpy.mockRestore(); + expect(notices).toEqual(freshData); + expect(debugSpy).not.toHaveBeenCalled(); - if (fs.existsSync('does-not-exist.json')) { - fs.unlinkSync('does-not-exist.json'); + debugSpy.mockRestore(); + } finally { + fs.rmSync(tmpDir, { recursive: true, force: true }); } }); diff --git a/tools/@aws-cdk/spec2cdk/package.json b/tools/@aws-cdk/spec2cdk/package.json index 9094a3efa3bf4..0e4429f7c59b1 100644 --- a/tools/@aws-cdk/spec2cdk/package.json +++ b/tools/@aws-cdk/spec2cdk/package.json @@ -32,9 +32,9 @@ }, "license": "Apache-2.0", "dependencies": { - "@aws-cdk/aws-service-spec": "^0.1.34", - "@aws-cdk/service-spec-importers": "^0.0.56", - "@aws-cdk/service-spec-types": "^0.0.101", + "@aws-cdk/aws-service-spec": "^0.1.35", + "@aws-cdk/service-spec-importers": "^0.0.57", + "@aws-cdk/service-spec-types": "^0.0.102", "@cdklabs/tskb": "^0.0.3", "@cdklabs/typewriter": "^0.0.3", "camelcase": "^6", diff --git a/version.v2.json b/version.v2.json index 05c6e8782420b..e910410b729ed 100644 --- a/version.v2.json +++ b/version.v2.json @@ -1,4 +1,4 @@ { - "version": "2.170.0", - "alphaVersion": "2.170.0-alpha.0" + "version": "2.171.0", + "alphaVersion": "2.171.0-alpha.0" } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index ea36b2bd22b23..4dc9b632d138e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -63,12 +63,12 @@ resolved "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz#6d3c7860354d4856a7e75375f2f0ecab313b4989" integrity sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A== -"@aws-cdk/aws-service-spec@^0.1.34": - version "0.1.34" - resolved "https://registry.npmjs.org/@aws-cdk/aws-service-spec/-/aws-service-spec-0.1.34.tgz#4940a67be44e97ab31cd3511b293f51492c99f22" - integrity sha512-bVsNLud3H573UOAqMo16g/kXtFrA755X1ipH++VLuOK5GI4qDpM1tU3/O4UO8JF7n7AA4/fsd7luUCKuydd9cQ== +"@aws-cdk/aws-service-spec@^0.1.35": + version "0.1.35" + resolved "https://registry.npmjs.org/@aws-cdk/aws-service-spec/-/aws-service-spec-0.1.35.tgz#2358c86d446a84fc31104510b4bf060aa8854866" + integrity sha512-1LcfP/mQZflEgup6VOq1qBw56GLoju8EcgGR+K5CDwsHHPybPvBxlwZUU+Ny8A7gFWi9pvm8Jdd79lz9ihmNPw== dependencies: - "@aws-cdk/service-spec-types" "^0.0.101" + "@aws-cdk/service-spec-types" "^0.0.102" "@cdklabs/tskb" "^0.0.3" "@aws-cdk/cloud-assembly-schema@^38.0.0", "@aws-cdk/cloud-assembly-schema@^38.0.1": @@ -106,12 +106,12 @@ resolved "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl-v31/-/lambda-layer-kubectl-v31-2.0.0.tgz#d87799d7d0d5dad77af45281a36942e4b7996b6b" integrity sha512-8JI0sMDbqCubOyt1TbQFEwicYok9KYSrNSfzREgjGJcoPy17/Kd0gbe44ATyLMfjae7dExUhhwKMhr6GK7Hmrw== -"@aws-cdk/service-spec-importers@^0.0.56": - version "0.0.56" - resolved "https://registry.npmjs.org/@aws-cdk/service-spec-importers/-/service-spec-importers-0.0.56.tgz#9a29608d5f484d3f3d3c7e039c239c47a53becb3" - integrity sha512-UwB31NyiIoBKIeWW+oDQ2jUxkA3NQdL8F5PpaRerCDomIK8FG7xw4/eeFtdTIlINBuosh2NcN6nKbXQ3Xnoy1g== +"@aws-cdk/service-spec-importers@^0.0.57": + version "0.0.57" + resolved "https://registry.npmjs.org/@aws-cdk/service-spec-importers/-/service-spec-importers-0.0.57.tgz#d4c6021e7477bae4f86f0db8f2d85cabcb6a2840" + integrity sha512-7i5ZUFHNeLvvJo9bWVn9HQC5y+kka+sNgtAc1apzqx1IeL0TW/11ZQiWCav+uIhs60xnZZHgeT+iSgpMyApBCw== dependencies: - "@aws-cdk/service-spec-types" "^0.0.101" + "@aws-cdk/service-spec-types" "^0.0.102" "@cdklabs/tskb" "^0.0.3" ajv "^6" canonicalize "^2.0.0" @@ -122,10 +122,10 @@ glob "^8" sort-json "^2.0.1" -"@aws-cdk/service-spec-types@^0.0.101": - version "0.0.101" - resolved "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.101.tgz#ce480d59b4eaa4ba29c78a9c53071a00966b87e1" - integrity sha512-a2e5dU1srewZJXSk0gR3McEE52v9pEB6u6IeozjsD9wmjFAVB+ggMFGYv5EQxhuq5/LQpo5enrlyVHZQnW1sZQ== +"@aws-cdk/service-spec-types@^0.0.102": + version "0.0.102" + resolved "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.102.tgz#1a7554556a4890c6ccfe62b7d15c4f9297c11e3d" + integrity sha512-CL9hyaPB4C4mcMinkO56uRHFlgtuy57LlpzQv3Qc3Z9FIElK8KG76GDD1SCy+FE/7B13EpIVJmJFRCvjJvyNng== dependencies: "@cdklabs/tskb" "^0.0.3" @@ -17403,9 +17403,9 @@ smart-buffer@^4.2.0: integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== smol-toml@~1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.0.tgz#5200e251fffadbb72570c84e9776d2a3eca48143" - integrity sha512-tWpi2TsODPScmi48b/OQZGi2lgUmBCHy6SZrhi/FdnnHiU1GwebbCfuQuxsC3nHaLwtYeJGPrDZDIeodDOc4pA== + version "1.3.1" + resolved "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.1.tgz#d9084a9e212142e3cab27ef4e2b8e8ba620bfe15" + integrity sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ== snake-case@^3.0.4: version "3.0.4"