tsdown 0.18.1 → 0.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/config.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { f as UserConfig, m as UserConfigFn, p as UserConfigExport } from "./index-CxBVIi0h.mjs";
1
+ import { h as UserConfigFn, m as UserConfigExport, p as UserConfig } from "./index-BJCpuL9t.mjs";
2
2
 
3
3
  //#region src/config.d.ts
4
4
 
@@ -1,5 +1,5 @@
1
1
  import "ansis";
2
- import { BuildOptions, ExternalOption, InputOption, InputOptions, InternalModuleFormat, MinifyOptions, ModuleFormat, ModuleTypes, OutputAsset, OutputChunk, OutputOptions, Plugin, TreeshakingOptions } from "rolldown";
2
+ import { BuildOptions, ExternalOption, InputOptions, InternalModuleFormat, MinifyOptions, ModuleFormat, ModuleTypes, OutputAsset, OutputChunk, OutputOptions, Plugin, TreeshakingOptions } from "rolldown";
3
3
  import { Hookable } from "hookable";
4
4
  import { Options as DtsOptions } from "rolldown-plugin-dts";
5
5
  import { StartOptions } from "@vitejs/devtools/cli-commands";
@@ -170,13 +170,13 @@ interface ExportsOptions {
170
170
  */
171
171
  all?: boolean;
172
172
  /**
173
- * Define filenames or RegExp patterns to exclude files from exports.
173
+ * Define globs or RegExp patterns to exclude files from exports.
174
174
  * This is useful for excluding files that should not be part of the package exports,
175
175
  * such as bin files or internal utilities.
176
176
  *
177
177
  * @example
178
178
  * ```js
179
- * exclude: ['foo.ts', /\.spec\.ts$/, /internal/]
179
+ * exclude: ['**\/*.test.ts', '**\/*.spec.ts', /internal/]
180
180
  * ```
181
181
  */
182
182
  exclude?: (RegExp | string)[];
@@ -228,6 +228,24 @@ declare function ReportPlugin(userOptions: ReportOptions, logger: Logger, cwd: s
228
228
  type Sourcemap = boolean | "inline" | "hidden";
229
229
  type Format = ModuleFormat;
230
230
  type NormalizedFormat = InternalModuleFormat;
231
+ /**
232
+ * Extended input option that supports glob negation patterns.
233
+ *
234
+ * When using object form, values can be:
235
+ * - A single glob pattern string
236
+ * - An array of glob patterns, including negation patterns (prefixed with `!`)
237
+ *
238
+ * @example
239
+ * ```ts
240
+ * entry: {
241
+ * // Single pattern
242
+ * "utils/*": "./src/utils/*.ts",
243
+ * // Array with negation pattern to exclude files
244
+ * "hooks/*": ["./src/hooks/*.ts", "!./src/hooks/index.ts"],
245
+ * }
246
+ * ```
247
+ */
248
+ type TsdownInputOption = string | string[] | Record<string, string | string[]>;
231
249
  interface Workspace {
232
250
  /**
233
251
  * Workspace directories. Glob patterns are supported.
@@ -257,8 +275,16 @@ type WithEnabled<T> = boolean | undefined | CIOption | (T & {
257
275
  interface UserConfig {
258
276
  /**
259
277
  * Defaults to `'src/index.ts'` if it exists.
278
+ *
279
+ * Supports glob patterns with negation to exclude files:
280
+ * @example
281
+ * ```ts
282
+ * entry: {
283
+ * "hooks/*": ["./src/hooks/*.ts", "!./src/hooks/index.ts"],
284
+ * }
285
+ * ```
260
286
  */
261
- entry?: InputOption;
287
+ entry?: TsdownInputOption;
262
288
  external?: ExternalOption;
263
289
  noExternal?: Arrayable<string | RegExp> | NoExternalFn;
264
290
  /**
@@ -603,6 +629,8 @@ type UserConfigFn = (inlineConfig: InlineConfig, context: {
603
629
  }) => Awaitable<Arrayable<UserConfig>>;
604
630
  type UserConfigExport = Awaitable<Arrayable<UserConfig> | UserConfigFn>;
605
631
  type ResolvedConfig = Overwrite<MarkPartial<Omit<UserConfig, "workspace" | "fromVite" | "publicDir" | "silent" | "bundle" | "removeNodeProtocol" | "logLevel" | "failOnWarn" | "customLogger">, "globalName" | "inputOptions" | "outputOptions" | "minify" | "define" | "alias" | "external" | "onSuccess" | "outExtensions" | "hooks" | "copy" | "loader" | "name" | "banner" | "footer">, {
632
+ /** Resolved entry map (after glob expansion) */
633
+ entry: Record<string, string>;
606
634
  nameLabel: string | undefined;
607
635
  format: NormalizedFormat;
608
636
  target?: string[];
@@ -623,4 +651,4 @@ type ResolvedConfig = Overwrite<MarkPartial<Omit<UserConfig, "workspace" | "from
623
651
  unused: false | UnusedOptions;
624
652
  }>;
625
653
  //#endregion
626
- export { OutExtensionObject as A, TsdownBundle as C, ChunkAddonObject as D, ChunkAddonFunction as E, TsdownHooks as F, DebugOptions as I, CopyEntry as L, PackageType as M, BuildContext as N, OutExtensionContext as O, RolldownContext as P, CopyOptions as R, RolldownChunk as S, ChunkAddon as T, ReportOptions as _, NoExternalFn as a, globalLogger as b, ResolvedConfig as c, UnusedOptions as d, UserConfig as f, Workspace as g, WithEnabled as h, InlineConfig as i, PackageJsonWithPath as j, OutExtensionFactory as k, Sourcemap as l, UserConfigFn as m, DtsOptions as n, NormalizedFormat as o, UserConfigExport as p, Format as r, PublintOptions as s, CIOption as t, TreeshakingOptions as u, ReportPlugin as v, AttwOptions as w, ExportsOptions as x, Logger as y, CopyOptionsFn as z };
654
+ export { OutExtensionFactory as A, CopyOptionsFn as B, RolldownChunk as C, ChunkAddonFunction as D, ChunkAddon as E, RolldownContext as F, TsdownHooks as I, DebugOptions as L, PackageJsonWithPath as M, PackageType as N, ChunkAddonObject as O, BuildContext as P, CopyEntry as R, ExportsOptions as S, AttwOptions as T, Workspace as _, NoExternalFn as a, Logger as b, ResolvedConfig as c, TsdownInputOption as d, UnusedOptions as f, WithEnabled as g, UserConfigFn as h, InlineConfig as i, OutExtensionObject as j, OutExtensionContext as k, Sourcemap as l, UserConfigExport as m, DtsOptions as n, NormalizedFormat as o, UserConfig as p, Format as r, PublintOptions as s, CIOption as t, TreeshakingOptions as u, ReportOptions as v, TsdownBundle as w, globalLogger as x, ReportPlugin as y, CopyOptions as z };
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { A as OutExtensionObject, C as TsdownBundle, D as ChunkAddonObject, E as ChunkAddonFunction, F as TsdownHooks, I as DebugOptions, L as CopyEntry, M as PackageType, N as BuildContext, O as OutExtensionContext, P as RolldownContext, R as CopyOptions, S as RolldownChunk, T as ChunkAddon, _ as ReportOptions, a as NoExternalFn, b as globalLogger, c as ResolvedConfig, d as UnusedOptions, f as UserConfig, g as Workspace, h as WithEnabled, i as InlineConfig, j as PackageJsonWithPath, k as OutExtensionFactory, l as Sourcemap, m as UserConfigFn, n as DtsOptions, o as NormalizedFormat, p as UserConfigExport, r as Format, s as PublintOptions, t as CIOption, u as TreeshakingOptions, w as AttwOptions, x as ExportsOptions, y as Logger, z as CopyOptionsFn } from "./index-CxBVIi0h.mjs";
1
+ import { A as OutExtensionFactory, B as CopyOptionsFn, C as RolldownChunk, D as ChunkAddonFunction, E as ChunkAddon, F as RolldownContext, I as TsdownHooks, L as DebugOptions, M as PackageJsonWithPath, N as PackageType, O as ChunkAddonObject, P as BuildContext, R as CopyEntry, S as ExportsOptions, T as AttwOptions, _ as Workspace, a as NoExternalFn, b as Logger, c as ResolvedConfig, d as TsdownInputOption, f as UnusedOptions, g as WithEnabled, h as UserConfigFn, i as InlineConfig, j as OutExtensionObject, k as OutExtensionContext, l as Sourcemap, m as UserConfigExport, n as DtsOptions, o as NormalizedFormat, p as UserConfig, r as Format, s as PublintOptions, t as CIOption, u as TreeshakingOptions, v as ReportOptions, w as TsdownBundle, x as globalLogger, z as CopyOptions } from "./index-BJCpuL9t.mjs";
2
2
  import { defineConfig } from "./config.mjs";
3
3
  import * as Rolldown from "rolldown";
4
4
 
@@ -19,4 +19,4 @@ declare function buildSingle(config: ResolvedConfig, configFiles: string[], isDu
19
19
  /** @internal */
20
20
  declare const shimFile: string;
21
21
  //#endregion
22
- export { AttwOptions, BuildContext, CIOption, ChunkAddon, ChunkAddonFunction, ChunkAddonObject, CopyEntry, CopyOptions, CopyOptionsFn, DebugOptions, DtsOptions, ExportsOptions, Format, InlineConfig, type Logger, NoExternalFn, NormalizedFormat, OutExtensionContext, OutExtensionFactory, OutExtensionObject, PackageJsonWithPath, PackageType, PublintOptions, ReportOptions, ResolvedConfig, Rolldown, RolldownChunk, RolldownContext, Sourcemap, TreeshakingOptions, TsdownBundle, TsdownHooks, UnusedOptions, UserConfig, UserConfigExport, UserConfigFn, WithEnabled, Workspace, build, buildSingle, defineConfig, globalLogger, shimFile };
22
+ export { AttwOptions, BuildContext, CIOption, ChunkAddon, ChunkAddonFunction, ChunkAddonObject, CopyEntry, CopyOptions, CopyOptionsFn, DebugOptions, DtsOptions, ExportsOptions, Format, InlineConfig, type Logger, NoExternalFn, NormalizedFormat, OutExtensionContext, OutExtensionFactory, OutExtensionObject, PackageJsonWithPath, PackageType, PublintOptions, ReportOptions, ResolvedConfig, Rolldown, RolldownChunk, RolldownContext, Sourcemap, TreeshakingOptions, TsdownBundle, TsdownHooks, TsdownInputOption, UnusedOptions, UserConfig, UserConfigExport, UserConfigFn, WithEnabled, Workspace, build, buildSingle, defineConfig, globalLogger, shimFile };
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { t as defineConfig } from "./config-DLSWqKoz.mjs";
2
- import { i as shimFile, n as build, r as buildSingle, t as Rolldown } from "./src-Bln7Ytss.mjs";
3
- import { o as globalLogger } from "./package-Db0DU5Ct.mjs";
2
+ import { i as shimFile, n as build, r as buildSingle, t as Rolldown } from "./src-aipTTo-5.mjs";
3
+ import { o as globalLogger } from "./package-CpLZpKe2.mjs";
4
4
 
5
5
  export { Rolldown, build, buildSingle, defineConfig, globalLogger, shimFile };
@@ -1,5 +1,8 @@
1
+ import { createRequire as __cjs_createRequire } from "node:module";
2
+ const __cjs_require = __cjs_createRequire(import.meta.url);
1
3
  import { bgRed, bgYellow, blue, green, rgb, yellow } from "ansis";
2
4
  import process from "node:process";
5
+ const picomatch = __cjs_require("picomatch");
3
6
 
4
7
  //#region src/utils/general.ts
5
8
  function toArray(val, defaultValue) {
@@ -26,7 +29,7 @@ function matchPattern(id, patterns) {
26
29
  pattern.lastIndex = 0;
27
30
  return pattern.test(id);
28
31
  }
29
- return id === pattern;
32
+ return id === pattern || picomatch(pattern)(id);
30
33
  });
31
34
  }
32
35
  function pkgExists(moduleName) {
@@ -161,7 +164,7 @@ function hue2rgb(p, q, t) {
161
164
 
162
165
  //#endregion
163
166
  //#region package.json
164
- var version = "0.18.1";
167
+ var version = "0.18.2";
165
168
 
166
169
  //#endregion
167
170
  export { getNameLabel as a, importWithError as c, pkgExists as d, promiseWithResolvers as f, toArray as g, slash as h, generateColor as i, matchPattern as l, resolveRegex as m, LogLevels as n, globalLogger as o, resolveComma as p, createLogger as r, prettyFormat as s, version as t, noop as u };
@@ -1,4 +1,4 @@
1
- import { C as TsdownBundle, c as ResolvedConfig, v as ReportPlugin, y as Logger } from "./index-CxBVIi0h.mjs";
1
+ import { b as Logger, c as ResolvedConfig, w as TsdownBundle, y as ReportPlugin } from "./index-BJCpuL9t.mjs";
2
2
  import { Plugin } from "rolldown";
3
3
 
4
4
  //#region src/features/external.d.ts
package/dist/plugins.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { a as WatchPlugin, c as NodeProtocolPlugin, l as ExternalPlugin, o as ShebangPlugin, s as ReportPlugin } from "./src-Bln7Ytss.mjs";
2
- import "./package-Db0DU5Ct.mjs";
1
+ import { a as WatchPlugin, c as NodeProtocolPlugin, l as ExternalPlugin, o as ShebangPlugin, s as ReportPlugin } from "./src-aipTTo-5.mjs";
2
+ import "./package-CpLZpKe2.mjs";
3
3
 
4
4
  export { ExternalPlugin, NodeProtocolPlugin, ReportPlugin, ShebangPlugin, WatchPlugin };
package/dist/run.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { g as toArray, o as globalLogger, p as resolveComma, t as version } from "./package-Db0DU5Ct.mjs";
2
+ import { g as toArray, o as globalLogger, p as resolveComma, t as version } from "./package-CpLZpKe2.mjs";
3
3
  import module from "node:module";
4
4
  import { dim } from "ansis";
5
5
  import { VERSION } from "rolldown";
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cjs_createRequire } from "node:module";
2
2
  const __cjs_require = __cjs_createRequire(import.meta.url);
3
- import { a as getNameLabel, c as importWithError, d as pkgExists, f as promiseWithResolvers, g as toArray, h as slash, i as generateColor, l as matchPattern, m as resolveRegex, n as LogLevels, o as globalLogger, p as resolveComma, r as createLogger, s as prettyFormat, t as version, u as noop } from "./package-Db0DU5Ct.mjs";
3
+ import { a as getNameLabel, c as importWithError, d as pkgExists, f as promiseWithResolvers, g as toArray, h as slash, i as generateColor, l as matchPattern, m as resolveRegex, n as LogLevels, o as globalLogger, p as resolveComma, r as createLogger, s as prettyFormat, t as version, u as noop } from "./package-CpLZpKe2.mjs";
4
4
  import { builtinModules, isBuiltin } from "node:module";
5
5
  import path, { dirname, extname, join, normalize, sep } from "node:path";
6
6
  import { fileURLToPath, pathToFileURL } from "node:url";
@@ -12,16 +12,16 @@ import { createDebug } from "obug";
12
12
  import { access, chmod, cp, mkdtemp, readFile, rm, stat, writeFile } from "node:fs/promises";
13
13
  import process, { env } from "node:process";
14
14
  import { createConfigCoreLoader } from "unconfig-core";
15
+ const picomatch = __cjs_require("picomatch");
15
16
  import { createDefu } from "defu";
16
17
  import { glob, isDynamicPattern } from "tinyglobby";
17
- const picomatch = __cjs_require("picomatch");
18
18
  import { RE_CSS, RE_DTS, RE_JS, RE_NODE_MODULES } from "rolldown-plugin-dts/filename";
19
19
  const minVersion = __cjs_require("semver/ranges/min-version.js");
20
20
  import { up } from "empathic/find";
21
21
  import { up as up$1 } from "empathic/package";
22
22
  const coerce = __cjs_require("semver/functions/coerce.js");
23
23
  const satisfies = __cjs_require("semver/functions/satisfies.js");
24
- import { createHooks } from "hookable";
24
+ import { Hookable } from "hookable";
25
25
  import { exec } from "tinyexec";
26
26
  const treeKill = __cjs_require("tree-kill");
27
27
  import util, { formatWithOptions, promisify } from "node:util";
@@ -201,7 +201,7 @@ async function nativeImport(id) {
201
201
  const importAttributes = Object.create(null);
202
202
  if (isSupported) {
203
203
  importAttributes.cache = "no";
204
- init();
204
+ init({ skipNodeModules: true });
205
205
  } else if (!isBun) url.searchParams.set("no-cache", crypto.randomUUID());
206
206
  const mod = await import(url.href, { with: importAttributes }).catch((error) => {
207
207
  if (error?.message?.includes?.("Cannot find module")) throw new Error(`Failed to load the config file. Try setting the --config-loader CLI flag to \`unrun\`.\n\n${error.message}`, { cause: error });
@@ -227,7 +227,8 @@ async function cleanOutDir(configs) {
227
227
  const files = await glob(config.clean, {
228
228
  cwd: config.cwd,
229
229
  absolute: true,
230
- onlyFiles: false
230
+ onlyFiles: false,
231
+ dot: true
231
232
  });
232
233
  const normalizedOutDir = config.outDir.replace(RE_LAST_SLASH, "");
233
234
  for (const file of files) if (file.replace(RE_LAST_SLASH, "") !== normalizedOutDir) removes.add(file);
@@ -271,9 +272,16 @@ async function resolveEntry(logger, entry, cwd, color, nameLabel) {
271
272
  async function toObjectEntry(entry, cwd) {
272
273
  if (typeof entry === "string") entry = [entry];
273
274
  if (!Array.isArray(entry)) return Object.fromEntries((await Promise.all(Object.entries(entry).map(async ([key, value]) => {
274
- if (!key.includes("*")) return [[key, value]];
275
- const valueGlob = picomatch.scan(value);
276
- return (await glob(value, {
275
+ if (!key.includes("*")) {
276
+ if (Array.isArray(value)) throw new TypeError(`Object entry "${key}" cannot have an array value when the key is not a glob pattern.`);
277
+ return [[key, value]];
278
+ }
279
+ const patterns = toArray(value);
280
+ const positivePatterns = patterns.filter((p) => !p.startsWith("!"));
281
+ if (positivePatterns.length === 0) throw new TypeError(`Object entry "${key}" has no positive pattern. At least one positive pattern is required.`);
282
+ if (positivePatterns.length > 1) throw new TypeError(`Object entry "${key}" has multiple positive patterns: ${positivePatterns.join(", ")}. Only one positive pattern is allowed. Use negation patterns (prefixed with "!") to exclude files.`);
283
+ const valueGlob = picomatch.scan(positivePatterns[0]);
284
+ return (await glob(patterns, {
277
285
  cwd,
278
286
  expandDirectories: false
279
287
  })).map((file) => [slash(key.replaceAll("*", stripExtname(path.relative(valueGlob.base, file)))), path.resolve(cwd, file)]);
@@ -530,7 +538,7 @@ async function resolveUserConfig(userConfig, inlineConfig) {
530
538
  nodeProtocol = nodeProtocol ?? (removeNodeProtocol ? "strip" : false);
531
539
  outDir = path.resolve(cwd, outDir);
532
540
  clean = resolveClean(clean, outDir, cwd);
533
- entry = await resolveEntry(logger, entry, cwd, color, nameLabel);
541
+ const resolvedEntry = await resolveEntry(logger, entry, cwd, color, nameLabel);
534
542
  if (dts == null) dts = !!(pkg?.types || pkg?.typings || hasExportsTypes(pkg));
535
543
  target = resolveTarget(logger, target, color, pkg, nameLabel);
536
544
  tsconfig = await resolveTsconfig(logger, tsconfig, cwd, color, nameLabel);
@@ -586,7 +594,7 @@ async function resolveUserConfig(userConfig, inlineConfig) {
586
594
  cwd,
587
595
  debug: debug$10,
588
596
  dts,
589
- entry,
597
+ entry: resolvedEntry,
590
598
  env: env$1,
591
599
  exports,
592
600
  external,
@@ -805,8 +813,8 @@ function renameTarget(target, rename, src) {
805
813
 
806
814
  //#endregion
807
815
  //#region src/features/hooks.ts
808
- async function createHooks$1(options) {
809
- const hooks = createHooks();
816
+ async function createHooks(options) {
817
+ const hooks = new Hookable();
810
818
  if (typeof options.hooks === "object") hooks.addHooks(options.hooks);
811
819
  else if (typeof options.hooks === "function") await options.hooks(hooks);
812
820
  return {
@@ -886,7 +894,7 @@ async function attw(options) {
886
894
  if ("resolutionKind" in problem) return !profiles[profile]?.includes(problem.resolutionKind);
887
895
  return true;
888
896
  });
889
- if (problems.length) errorMessage = `problems found:\n${problems.map(formatProblem).join("\n")}`;
897
+ if (problems.length) errorMessage = `problems found:\n${problems.map((problem) => formatProblem(checkResult.packageName, problem)).join("\n")}`;
890
898
  } else errorMessage = `Package has no types`;
891
899
  if (errorMessage) options.logger[level](options.nameLabel, label$1, errorMessage);
892
900
  else options.logger.success(options.nameLabel, label$1, "No problems found", dim`(${Math.round(performance.now() - t)}ms)`);
@@ -894,9 +902,9 @@ async function attw(options) {
894
902
  /**
895
903
  * Format an ATTW problem for display
896
904
  */
897
- function formatProblem(problem) {
905
+ function formatProblem(packageName, problem) {
898
906
  const resolutionKind = "resolutionKind" in problem ? ` (${problem.resolutionKind})` : "";
899
- const entrypoint = "entrypoint" in problem ? ` at ${problem.entrypoint}` : "";
907
+ const entrypoint = "entrypoint" in problem ? ` at ${slash(path.join(packageName, problem.entrypoint))}` : "";
900
908
  switch (problem.kind) {
901
909
  case "NoResolution": return ` ❌ No resolution${resolutionKind}${entrypoint}`;
902
910
  case "UntypedResolution": return ` ⚠️ Untyped resolution${resolutionKind}${entrypoint}`;
@@ -1051,10 +1059,9 @@ Imported by ${underline(importer)}`);
1051
1059
  if (noExternal?.(id, importer)) return "no-external";
1052
1060
  if (skipNodeModulesBundle) {
1053
1061
  const resolved = await context.resolve(id, importer, extraOptions);
1054
- if (!resolved) return false;
1055
- return resolved.external || RE_NODE_MODULES.test(resolved.id);
1062
+ if (resolved && (resolved.external || RE_NODE_MODULES.test(resolved.id))) return true;
1056
1063
  }
1057
- if (deps) return deps.some((dep) => id === dep || id.startsWith(`${dep}/`));
1064
+ if (deps && deps.some((dep) => id === dep || id.startsWith(`${dep}/`))) return true;
1058
1065
  return false;
1059
1066
  }
1060
1067
  }
@@ -1583,7 +1590,7 @@ async function build$1(userOptions = {}) {
1583
1590
  */
1584
1591
  async function buildSingle(config, configFiles, isDualFormat, clean, restart, done) {
1585
1592
  const { format, dts, watch: watch$1, logger, outDir } = config;
1586
- const { hooks, context } = await createHooks$1(config);
1593
+ const { hooks, context } = await createHooks(config);
1587
1594
  warnLegacyCJS(config);
1588
1595
  const startTime = performance.now();
1589
1596
  await hooks.callHook("build:prepare", context);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tsdown",
3
3
  "type": "module",
4
- "version": "0.18.1",
4
+ "version": "0.18.2",
5
5
  "description": "The Elegant Bundler for Libraries",
6
6
  "author": "Kevin Deng <sxzz@sxzz.moe>",
7
7
  "license": "MIT",
@@ -80,8 +80,8 @@
80
80
  "cac": "^6.7.14",
81
81
  "defu": "^6.1.4",
82
82
  "empathic": "^2.0.0",
83
- "hookable": "^5.5.3",
84
- "import-without-cache": "^0.2.4",
83
+ "hookable": "^6.0.1",
84
+ "import-without-cache": "^0.2.5",
85
85
  "obug": "^2.1.1",
86
86
  "picomatch": "^4.0.3",
87
87
  "rolldown": "1.0.0-beta.55",
@@ -101,7 +101,7 @@
101
101
  "@types/node": "^25.0.3",
102
102
  "@types/picomatch": "^4.0.2",
103
103
  "@types/semver": "^7.7.1",
104
- "@typescript/native-preview": "7.0.0-dev.20251217.1",
104
+ "@typescript/native-preview": "7.0.0-dev.20251221.1",
105
105
  "@unocss/eslint-plugin": "^66.5.10",
106
106
  "@vitejs/devtools": "^0.0.0-alpha.20",
107
107
  "@vitest/coverage-v8": "4.0.16",