diff --git a/packages/core/package.json b/packages/core/package.json index b4315ff2f..081a3aea1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -56,7 +56,9 @@ "rslib": "npm:@rslib/core@0.4.0", "rslog": "^1.2.3", "tsconfck": "3.1.4", - "typescript": "^5.7.3" + "typescript": "^5.7.3", + "typia": "^7.6.2", + "typia-rspack-plugin": "^1.0.1" }, "peerDependencies": { "@microsoft/api-extractor": "^7", diff --git a/packages/core/rslib.config.ts b/packages/core/rslib.config.ts index 6c42b6e3d..c16ce749f 100644 --- a/packages/core/rslib.config.ts +++ b/packages/core/rslib.config.ts @@ -3,6 +3,7 @@ import path from 'node:path'; import type { RsbuildPlugin } from '@rsbuild/core'; import { pluginPublint } from 'rsbuild-plugin-publint'; import { defineConfig } from 'rslib'; +import { TypiaRspackPlugin } from 'typia-rspack-plugin'; const pluginFixDtsTypes: RsbuildPlugin = { name: 'fix-dts-types', @@ -55,4 +56,14 @@ export default defineConfig({ rslog: '../compiled/rslog/index.js', }, }, + tools: { + rspack: { + plugins: [ + new TypiaRspackPlugin({ + log: false, + include: [path.resolve('./src/validate.ts')], + }), + ], + }, + }, }); diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts index c82dff358..a2a0989b7 100644 --- a/packages/core/src/config.ts +++ b/packages/core/src/config.ts @@ -80,6 +80,7 @@ import { transformSyntaxToRspackTarget, } from './utils/syntax'; import { loadTsconfig } from './utils/tsconfig'; +import { validate } from './validate'; /** * This function helps you to autocomplete configuration types. @@ -138,7 +139,9 @@ export async function loadConfig({ envMode, }); - return { content: content as RslibConfig, filePath: configFilePath }; + const rslibConfig = validate(content, configFilePath); + + return { content: rslibConfig, filePath: configFilePath }; } const composeExternalsWarnConfig = ( diff --git a/packages/core/src/validate.ts b/packages/core/src/validate.ts new file mode 100644 index 000000000..02e9568e8 --- /dev/null +++ b/packages/core/src/validate.ts @@ -0,0 +1,48 @@ +import color from 'picocolors'; +import * as typia from 'typia'; +import type { RslibConfig } from './types'; + +export const validateConfig: ( + input: unknown, +) => typia.IValidation = typia.createValidateEquals(); + +export function validate(input: unknown, configPath?: string): RslibConfig { + const result = validateConfig(input); + + if (result.success) { + return result.data; + } + + const messages = result.errors.flatMap(({ expected, path, value }) => { + if (expected === 'undefined') { + // Unknown properties + return [`Unknown property: \`${color.red(path)}\` in configuration`, '']; + } + + return [ + `Invalid config on \`${color.red(path)}\`.`, + ` - Expect to be ${color.green(expected)}`, + ` - Got: ${color.red(whatIs(value))}`, + '', + ]; + }); + + // We use `Array.isArray` outside to deal with error messages + throw new Error( + [ + `Invalid configuration${ + configPath ? ` loaded from ${color.dim(configPath)}` : '.' + }`, + '', + ] + .concat(messages) + .join('\n'), + ); +} + +function whatIs(value: unknown): string { + return Object.prototype.toString + .call(value) + .replace(/^\[object\s+([a-z]+)\]$/i, '$1') + .toLowerCase(); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d74aa794a..d4bbfb37f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -316,6 +316,12 @@ importers: typescript: specifier: ^5.7.3 version: 5.7.3 + typia: + specifier: ^7.6.2 + version: 7.6.2(typescript@5.7.3) + typia-rspack-plugin: + specifier: ^1.0.1 + version: 1.0.1(typescript@5.7.3)(typia@7.6.2(typescript@5.7.3)) packages/create-rslib: dependencies: @@ -2301,6 +2307,9 @@ packages: '@rushstack/ts-command-line@4.23.4': resolution: {integrity: sha512-pqmzDJCm0TS8VyeqnzcJ7ncwXgiLDQ6LVmXXfqv2nPL6VIz+UpyTpNVfZRJpyyJ+UDxqob1vIj2liaUfBjv8/A==} + '@samchon/openapi@2.4.2': + resolution: {integrity: sha512-uKoIzW7gHGTK1P4BQ+JSoHzSvLSPZs/J08KfEmci9cfVoNDb+5kmuDnoQwPGZW+dLCNoCSocgDDzLWApMgmaxw==} + '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} @@ -2844,6 +2853,10 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2887,6 +2900,9 @@ packages: array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -3188,6 +3204,10 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -3255,6 +3275,10 @@ packages: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} + comment-json@4.2.5: + resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} + engines: {node: '>= 6'} + common-path-prefix@3.0.0: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} @@ -3562,6 +3586,10 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} + drange@1.1.1: + resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==} + engines: {node: '>=4'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -4030,6 +4058,10 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -4215,6 +4247,10 @@ packages: inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -4872,6 +4908,9 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -4995,6 +5034,10 @@ packages: resolution: {integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==} engines: {node: '>=10'} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + ora@8.2.0: resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} engines: {node: '>=18'} @@ -5338,6 +5381,10 @@ packages: rambda@9.3.0: resolution: {integrity: sha512-cl/7DCCKNxmsbc0dXZTJTY08rvDdzLhVfE6kPBson1fWzDapLzv0RKSzjpmAqP53fkQqAvq05gpUVHTrUNsuxg==} + randexp@0.5.3: + resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==} + engines: {node: '>=4'} + randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -5507,6 +5554,10 @@ packages: remark@14.0.3: resolution: {integrity: sha512-bfmJW1dmR2LvaMJuAnE88pZP9DktIFYXazkTfOIKZzi3Knk9lT0roItIA24ydOucI3bV/g/tXBA6hzqq3FV9Ew==} + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -5557,6 +5608,10 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} + ret@0.2.2: + resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} + engines: {node: '>=4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -5635,6 +5690,10 @@ packages: resolution: {integrity: sha512-1QPhjcQuEYUYx+CN/W0UiNgyqrLBxH4VeMjQO1qoDxjJB9/brQakDqbGq/kmBvanCTpbj1nE0uAjO9zWNDrsig==} hasBin: true + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -6180,6 +6239,9 @@ packages: peerDependencies: tslib: ^2 + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + timers-browserify@2.0.12: resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} engines: {node: '>=0.6.0'} @@ -6290,6 +6352,10 @@ packages: tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} @@ -6312,6 +6378,19 @@ packages: engines: {node: '>=14.17'} hasBin: true + typia-rspack-plugin@1.0.1: + resolution: {integrity: sha512-x67JLFyokroUAUPvkzd1H0w6ZiZ5eO1wxMoDLOrayJ2WoLdRg88KFg5KXgOYoXK7K513uQNt9mFez3NT04UCpw==} + engines: {node: '>=18'} + peerDependencies: + typescript: '*' + typia: '*' + + typia@7.6.2: + resolution: {integrity: sha512-kh6E20DlOwsHgK+MrvkAY/p2HkeNCXwEjk9m8fsKdXL/n9An0RvzB6e7+yLwCjvFTISsiDok1OXe8XlCn4oUeg==} + hasBin: true + peerDependencies: + typescript: '>=4.8.0 <5.8.0' + undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -6389,6 +6468,10 @@ packages: webpack-sources: optional: true + unplugin@2.1.2: + resolution: {integrity: sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==} + engines: {node: '>=18.12.0'} + upath@2.0.1: resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} engines: {node: '>=4'} @@ -6611,6 +6694,10 @@ packages: engines: {node: '>=8'} hasBin: true + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -8234,6 +8321,8 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@samchon/openapi@2.4.2': {} + '@selderee/plugin-htmlparser2@0.11.0': dependencies: domhandler: 5.0.3 @@ -8909,6 +8998,10 @@ snapshots: ansi-colors@4.1.3: {} + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -8942,6 +9035,8 @@ snapshots: array-flatten@1.1.1: {} + array-timsort@1.0.3: {} + array-union@2.1.0: {} asn1.js@4.10.1: @@ -9275,6 +9370,8 @@ snapshots: cli-spinners@2.9.2: {} + cli-width@3.0.0: {} + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -9329,6 +9426,14 @@ snapshots: commander@7.2.0: {} + comment-json@4.2.5: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + common-path-prefix@3.0.0: {} commondir@1.0.1: {} @@ -9619,6 +9724,8 @@ snapshots: dotenv@16.4.5: {} + drange@1.1.1: {} + eastasianwidth@0.2.0: {} edit-json-file@1.8.0: @@ -10176,6 +10283,8 @@ snapshots: has-flag@4.0.0: {} + has-own-prop@2.0.0: {} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 @@ -10432,6 +10541,24 @@ snapshots: inline-style-parser@0.1.1: {} + inquirer@8.2.6: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + invariant@2.2.4: dependencies: loose-envify: 1.4.0 @@ -11285,6 +11412,8 @@ snapshots: muggle-string@0.4.1: {} + mute-stream@0.0.8: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -11441,6 +11570,18 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + ora@8.2.0: dependencies: chalk: 5.4.1 @@ -11780,6 +11921,11 @@ snapshots: rambda@9.3.0: {} + randexp@0.5.3: + dependencies: + drange: 1.1.1 + ret: 0.2.2 + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 @@ -12020,6 +12166,8 @@ snapshots: transitivePeerDependencies: - supports-color + repeat-string@1.6.1: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -12063,6 +12211,8 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 + ret@0.2.2: {} + reusify@1.0.4: {} rfdc@1.4.1: {} @@ -12158,6 +12308,8 @@ snapshots: - supports-color - webpack + run-async@2.4.1: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -12749,6 +12901,8 @@ snapshots: dependencies: tslib: 2.8.1 + through@2.3.8: {} + timers-browserify@2.0.12: dependencies: setimmediate: 1.0.5 @@ -12833,6 +12987,8 @@ snapshots: tty-browserify@0.0.1: {} + type-fest@0.21.3: {} + type-fest@2.19.0: {} type-fest@4.30.0: {} @@ -12846,6 +13002,22 @@ snapshots: typescript@5.7.3: {} + typia-rspack-plugin@1.0.1(typescript@5.7.3)(typia@7.6.2(typescript@5.7.3)): + dependencies: + typescript: 5.7.3 + typia: 7.6.2(typescript@5.7.3) + unplugin: 2.1.2 + + typia@7.6.2(typescript@5.7.3): + dependencies: + '@samchon/openapi': 2.4.2 + commander: 10.0.1 + comment-json: 4.2.5 + inquirer: 8.2.6 + package-manager-detector: 0.2.9 + randexp: 0.5.3 + typescript: 5.7.3 + undici-types@5.26.5: {} undici-types@6.19.8: {} @@ -12936,6 +13108,11 @@ snapshots: optionalDependencies: webpack-sources: 3.2.3 + unplugin@2.1.2: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + upath@2.0.1: {} update-browserslist-db@1.1.1(browserslist@4.24.4): @@ -13180,6 +13357,12 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 diff --git a/tests/integration/entry/index.test.ts b/tests/integration/entry/index.test.ts index 2ee1bdf64..10ce64461 100644 --- a/tests/integration/entry/index.test.ts +++ b/tests/integration/entry/index.test.ts @@ -165,7 +165,14 @@ test('validate entry and throw errors', async () => { } expect(stripAnsi(errMsg)).toMatchInlineSnapshot( - `"The source.entry configuration should be an object, but received string: ./src/**. Checkout https://lib.rsbuild.dev/config/rsbuild/source#sourceentry for more details."`, + ` + "Invalid configuration loaded from /tests/integration/entry/validate/bundlelessWithString.config.ts + + Invalid config on \`$input.lib[0].source.entry\`. + - Expect to be (RsbuildEntry | undefined) + - Got: string + " + `, ); });