@deltabox/toolchain 2.3.4 → 2.6.0
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/CHANGELOG.md +141 -8
- package/dist/biome.d.ts +2 -2
- package/dist/biome.js +1 -1
- package/dist/cli/commands/sync.js +1 -1
- package/dist/cli/commands/watch.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/register.js +1 -1
- package/dist/cli/tooling-commands.js +1 -0
- package/dist/config.d.ts +2 -1
- package/dist/config.js +1 -1
- package/dist/core.d.ts +4 -3
- package/dist/core.js +1 -1
- package/dist/index.d.ts +14 -10
- package/dist/index.js +1 -1
- package/dist/migrate.d.ts +3 -3
- package/dist/migrate.js +1 -1
- package/dist/package.js +1 -1
- package/dist/packages/biome/src/index.d.ts +142 -7
- package/dist/packages/biome/src/index.js +1 -1
- package/dist/packages/changelog/src/workflows.d.ts +19 -5
- package/dist/packages/changelog/src/workflows.js +5 -4
- package/dist/packages/config/src/generators/commands.d.ts +22 -0
- package/dist/packages/config/src/generators/commands.js +2 -0
- package/dist/packages/config/src/generators/index.d.ts +2 -1
- package/dist/packages/config/src/generators/index.js +1 -1
- package/dist/packages/config/src/generators/types.js +1 -1
- package/dist/packages/config/src/index.d.ts +3 -2
- package/dist/packages/config/src/index.js +1 -1
- package/dist/packages/config/src/schema.js +1 -1
- package/dist/packages/core/src/editor-config.js +1 -1
- package/dist/packages/core/src/fmt-groups.d.ts +32 -0
- package/dist/packages/core/src/fmt-groups.js +1 -0
- package/dist/packages/core/src/index.d.ts +5 -4
- package/dist/packages/core/src/index.js +1 -1
- package/dist/packages/core/src/loader.js +1 -1
- package/dist/packages/core/src/select.d.ts +3 -0
- package/dist/packages/core/src/select.js +1 -1
- package/dist/packages/core/src/sync.d.ts +6 -0
- package/dist/packages/core/src/sync.js +1 -1
- package/dist/packages/core/src/watch.d.ts +41 -0
- package/dist/packages/core/src/watch.js +1 -1
- package/dist/packages/migrate/src/cli/index.js +1 -1
- package/dist/packages/migrate/src/index.d.ts +3 -3
- package/dist/packages/migrate/src/index.js +1 -1
- package/dist/packages/migrate/src/oxc.js +1 -1
- package/dist/packages/migrate/src/oxlint-map.d.ts +34 -1
- package/dist/packages/migrate/src/oxlint-map.js +1 -1
- package/dist/packages/migrate/src/types.d.ts +3 -2
- package/dist/packages/migrate/src/vite-target.d.ts +7 -0
- package/dist/packages/migrate/src/vite-target.js +2 -2
- package/dist/packages/migrate/src/vite.d.ts +30 -1
- package/dist/packages/migrate/src/vite.js +10 -8
- package/dist/packages/project/src/cli/index.js +1 -1
- package/dist/packages/project/src/config.d.ts +20 -5
- package/dist/packages/project/src/config.js +1 -1
- package/dist/packages/project/src/index.d.ts +3 -3
- package/dist/packages/project/src/index.js +1 -1
- package/dist/packages/project/src/sync.js +1 -1
- package/dist/packages/project/src/typescript.d.ts +34 -0
- package/dist/packages/project/src/typescript.js +18 -10
- package/dist/packages/shared/src/config-schema/alias-rewrite.d.ts +32 -0
- package/dist/packages/shared/src/config-schema/biome.js +1 -1
- package/dist/packages/shared/src/config-schema/changelog.d.ts +623 -56
- package/dist/packages/shared/src/config-schema/ci.d.ts +1873 -163
- package/dist/packages/shared/src/config-schema/format.d.ts +4 -6
- package/dist/packages/shared/src/config-schema/format.js +1 -1
- package/dist/packages/shared/src/config-schema/generated/gitlab-ci.d.ts +1 -1
- package/dist/packages/shared/src/config-schema/generated/oxfmt-config.d.ts +1 -1
- package/dist/packages/shared/src/config-schema/index.d.ts +6057 -862
- package/dist/packages/shared/src/config-schema/index.js +1 -1
- package/dist/packages/shared/src/config-schema/json.d.ts +1 -1
- package/dist/packages/shared/src/config-schema/tsconfig.d.ts +21 -0
- package/dist/packages/shared/src/config-schema/tsconfig.js +1 -1
- package/dist/packages/shared/src/config-schema/vendor-types.d.ts +156 -0
- package/dist/packages/shared/src/config-schema/workflow.d.ts +3678 -297
- package/dist/packages/shared/src/config-schema/workflow.js +1 -1
- package/dist/packages/shared/src/config-types.d.ts +219 -37
- package/dist/packages/shared/src/ignore.d.ts +9 -1
- package/dist/packages/shared/src/ignore.js +1 -1
- package/dist/packages/shared/src/index.d.ts +11 -8
- package/dist/packages/shared/src/index.js +1 -1
- package/dist/packages/shared/src/string-utils.d.ts +9 -2
- package/dist/packages/shared/src/string-utils.js +2 -2
- package/dist/packages/shared/src/template.d.ts +1 -1
- package/dist/packages/shared/src/toolchain.d.ts +13 -4
- package/dist/packages/shared/src/toolchain.js +1 -1
- package/dist/packages/shared/src/tsconfig-files.d.ts +14 -0
- package/dist/packages/shared/src/tsconfig-files.js +1 -0
- package/dist/packages/shared/src/types.d.ts +4 -2
- package/dist/packages/shared/src/vite-defaults.d.ts +102 -10
- package/dist/packages/shared/src/vite-defaults.js +1 -1
- package/dist/packages/shared/src/yaml.d.ts +1 -1
- package/dist/packages/tsconfig/src/auto.d.ts +11 -0
- package/dist/packages/tsconfig/src/auto.js +1 -0
- package/dist/packages/tsconfig/src/cli/generate/index.d.ts +58 -0
- package/dist/packages/tsconfig/src/cli/generate/index.js +1 -1
- package/dist/packages/tsconfig/src/cli/generate/utils.d.ts +12 -0
- package/dist/packages/tsconfig/src/cli/generate/utils.js +1 -1
- package/dist/packages/tsconfig/src/cli/index.js +1 -1
- package/dist/packages/tsconfig/src/files.d.ts +5 -0
- package/dist/packages/tsconfig/src/files.js +1 -0
- package/dist/packages/tsconfig/src/index.d.ts +6 -5
- package/dist/packages/tsconfig/src/index.js +1 -1
- package/dist/packages/tsconfig/src/overrides.d.ts +3 -3
- package/dist/packages/tsconfig/src/resolve.d.ts +15 -3
- package/dist/packages/tsconfig/src/resolve.js +1 -1
- package/dist/packages/tsconfig/src/sync.d.ts +5 -11
- package/dist/packages/tsconfig/src/sync.js +1 -1
- package/dist/packages/tsconfig/src/templates.d.ts +38 -4
- package/dist/packages/tsconfig/src/workspaces.d.ts +36 -0
- package/dist/packages/tsconfig/src/workspaces.js +1 -0
- package/dist/packages/tsdown/src/config/node.js +1 -1
- package/dist/packages/vite/src/commands.js +1 -1
- package/dist/packages/vite/src/index.d.ts +3 -1
- package/dist/packages/vite/src/index.js +1 -1
- package/dist/packages/vite/src/resolve.js +1 -1
- package/dist/packages/vite/src/sync.js +3 -3
- package/dist/project.d.ts +2 -2
- package/dist/project.js +1 -1
- package/dist/shared.d.ts +10 -7
- package/dist/shared.js +1 -1
- package/dist/sync.d.ts +2 -0
- package/dist/sync.js +1 -1
- package/dist/tooling.d.ts +18 -1
- package/dist/tooling.js +1 -1
- package/dist/tsconfig.d.ts +5 -4
- package/dist/tsconfig.js +1 -1
- package/dist/vite.d.ts +2 -1
- package/dist/vite.js +1 -1
- package/package.json +15 -14
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
3
|
import { editorConfigSyncTask, toolingConfigTask } from "./editor-config.js";
|
|
4
|
+
import { FORMAT_IMPORT_GROUP_DEFAULTS_ENV, FORMAT_IMPORT_GROUP_DEFAULTS_SETTING, ResolveFmtCustomGroupsInput, ResolveFmtCustomGroupsOptions, resolveFmtCustomGroups } from "./fmt-groups.js";
|
|
4
5
|
import { DBX_GITIGNORE_BLOCK, ensureDbxGitignore } from "./gitignore.js";
|
|
5
6
|
import { BuildProjectGraphOptions, IGNORED_DIRS, PackageManager, ProjectGraph, ProjectNode, buildProjectGraph, detectPackageManager, orderProjects, projectGraphPath, readProjectGraph, writeProjectGraph } from "./graph.js";
|
|
6
7
|
import { LoadToolchainConfigOptions, LoadedConfig, findConfigFile, findParentConfigFile, loadToolchainConfig, mergeToolchainConfig } from "./loader.js";
|
|
@@ -9,11 +10,11 @@ import { TsconfigFileNames, detectProjectType, resolveProjectType } from "./proj
|
|
|
9
10
|
import { ProviderRegistryPath, addGlobalProviderRegistry, addProjectProviderRegistry, defaultGlobalProvidersDir, globalProviderRegistryPath, legacyProviderRegistryPath, providerRegistryPath, providerRegistryPaths, readAllProviders, readAllProvidersSync, readGlobalProviders, readProviderRegistry, removeGlobalProviderRegistry, removeProjectProviderRegistry, setGlobalProviderRegistries, setProjectProviderRegistries, writeGlobalProviders, writeProviderRegistry } from "./provider-registry.js";
|
|
10
11
|
import { SelectProjectsOptions, SelectedProject, selectProjects } from "./select.js";
|
|
11
12
|
import { ResetProjectsOptions, ResetProjectsResult, ResetRestore, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, resetProjects, resetToolchain } from "./reset.js";
|
|
12
|
-
import { RemovedFile, RunSyncOptions, SyncResult, runSync } from "./sync.js";
|
|
13
|
+
import { RemovedFile, RunSyncOptions, SyncResult, runSync, selectSyncTasks } from "./sync.js";
|
|
13
14
|
import { VscodeSyncOptions, vscodeSyncTask } from "./vscode.js";
|
|
14
|
-
import { RunWatchOptions, resolveWatchGlobs, runWatch } from "./watch.js";
|
|
15
|
+
import { DEFAULT_WATCH_GLOBS, ResolveWatchInputFilesOptions, ResolvedWatchInputFiles, RunWatchOptions, resolveWatchGlobs, resolveWatchInputFiles, runWatch } from "./watch.js";
|
|
15
16
|
declare namespace index_d_exports {
|
|
16
|
-
export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, FileOrigin, IGNORED_DIRS, LoadToolchainConfigOptions, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ProviderRegistryPath, RemovedFile, ResetProjectsOptions, ResetProjectsResult, ResetRestore, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, TIMESTAMPS_FILE, TsconfigFileNames, VscodeSyncOptions, addGlobalProviderRegistry, addProjectProviderRegistry, buildProjectGraph, defaultGlobalProvidersDir, detectPackageManager, detectProjectType, editorConfigSyncTask, ensureDbxGitignore, findConfigFile, findParentConfigFile, globalProviderRegistryPath, legacyProviderRegistryPath, loadToolchainConfig, mergeToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, providerRegistryPaths, readAllProviders, readAllProvidersSync, readGlobalProviders, readManifest, readProjectGraph, readProviderRegistry, readSyncedAt, removeGlobalProviderRegistry, removeProjectProviderRegistry, resetProjects, resetToolchain, resolveProjectType, resolveWatchGlobs, runSync, runWatch, selectProjects, setGlobalProviderRegistries, setProjectProviderRegistries, toolingConfigTask, vscodeSyncTask, writeGlobalProviders, writeManifest, writeProjectGraph, writeProviderRegistry };
|
|
17
|
+
export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, DEFAULT_WATCH_GLOBS, FORMAT_IMPORT_GROUP_DEFAULTS_ENV, FORMAT_IMPORT_GROUP_DEFAULTS_SETTING, FileOrigin, IGNORED_DIRS, LoadToolchainConfigOptions, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ProviderRegistryPath, RemovedFile, ResetProjectsOptions, ResetProjectsResult, ResetRestore, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, ResolveFmtCustomGroupsInput, ResolveFmtCustomGroupsOptions, ResolveWatchInputFilesOptions, ResolvedWatchInputFiles, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, TIMESTAMPS_FILE, TsconfigFileNames, VscodeSyncOptions, addGlobalProviderRegistry, addProjectProviderRegistry, buildProjectGraph, defaultGlobalProvidersDir, detectPackageManager, detectProjectType, editorConfigSyncTask, ensureDbxGitignore, findConfigFile, findParentConfigFile, globalProviderRegistryPath, legacyProviderRegistryPath, loadToolchainConfig, mergeToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, providerRegistryPaths, readAllProviders, readAllProvidersSync, readGlobalProviders, readManifest, readProjectGraph, readProviderRegistry, readSyncedAt, removeGlobalProviderRegistry, removeProjectProviderRegistry, resetProjects, resetToolchain, resolveFmtCustomGroups, resolveProjectType, resolveWatchGlobs, resolveWatchInputFiles, runSync, runWatch, selectProjects, selectSyncTasks, setGlobalProviderRegistries, setProjectProviderRegistries, toolingConfigTask, vscodeSyncTask, writeGlobalProviders, writeManifest, writeProjectGraph, writeProviderRegistry };
|
|
17
18
|
}
|
|
18
19
|
//#endregion
|
|
19
|
-
export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, FileOrigin, IGNORED_DIRS, LoadToolchainConfigOptions, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ProviderRegistryPath, RemovedFile, ResetProjectsOptions, ResetProjectsResult, ResetRestore, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, TIMESTAMPS_FILE, TsconfigFileNames, VscodeSyncOptions, addGlobalProviderRegistry, addProjectProviderRegistry, buildProjectGraph, defaultGlobalProvidersDir, detectPackageManager, detectProjectType, editorConfigSyncTask, ensureDbxGitignore, findConfigFile, findParentConfigFile, globalProviderRegistryPath, index_d_exports, legacyProviderRegistryPath, loadToolchainConfig, mergeToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, providerRegistryPaths, readAllProviders, readAllProvidersSync, readGlobalProviders, readManifest, readProjectGraph, readProviderRegistry, readSyncedAt, removeGlobalProviderRegistry, removeProjectProviderRegistry, resetProjects, resetToolchain, resolveProjectType, resolveWatchGlobs, runSync, runWatch, selectProjects, setGlobalProviderRegistries, setProjectProviderRegistries, toolingConfigTask, vscodeSyncTask, writeGlobalProviders, writeManifest, writeProjectGraph, writeProviderRegistry };
|
|
20
|
+
export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, DEFAULT_WATCH_GLOBS, FORMAT_IMPORT_GROUP_DEFAULTS_ENV, FORMAT_IMPORT_GROUP_DEFAULTS_SETTING, FileOrigin, IGNORED_DIRS, LoadToolchainConfigOptions, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ProviderRegistryPath, RemovedFile, ResetProjectsOptions, ResetProjectsResult, ResetRestore, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, ResolveFmtCustomGroupsInput, ResolveFmtCustomGroupsOptions, ResolveWatchInputFilesOptions, ResolvedWatchInputFiles, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, TIMESTAMPS_FILE, TsconfigFileNames, VscodeSyncOptions, addGlobalProviderRegistry, addProjectProviderRegistry, buildProjectGraph, defaultGlobalProvidersDir, detectPackageManager, detectProjectType, editorConfigSyncTask, ensureDbxGitignore, findConfigFile, findParentConfigFile, globalProviderRegistryPath, index_d_exports, legacyProviderRegistryPath, loadToolchainConfig, mergeToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, providerRegistryPaths, readAllProviders, readAllProvidersSync, readGlobalProviders, readManifest, readProjectGraph, readProviderRegistry, readSyncedAt, removeGlobalProviderRegistry, removeProjectProviderRegistry, resetProjects, resetToolchain, resolveFmtCustomGroups, resolveProjectType, resolveWatchGlobs, resolveWatchInputFiles, runSync, runWatch, selectProjects, selectSyncTasks, setGlobalProviderRegistries, setProjectProviderRegistries, toolingConfigTask, vscodeSyncTask, writeGlobalProviders, writeManifest, writeProjectGraph, writeProviderRegistry };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{editorConfigSyncTask as t,toolingConfigTask as n}from"./editor-config.js";import{
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{editorConfigSyncTask as t,toolingConfigTask as n}from"./editor-config.js";import{detectProjectType as r,resolveProjectType as i}from"./project-type.js";import{findConfigFile as a,findParentConfigFile as o,loadToolchainConfig as s,mergeToolchainConfig as c}from"./loader.js";import{IGNORED_DIRS as l,buildProjectGraph as u,detectPackageManager as d,orderProjects as f,projectGraphPath as p,readProjectGraph as m,writeProjectGraph as h}from"./graph.js";import{FORMAT_IMPORT_GROUP_DEFAULTS_ENV as g,FORMAT_IMPORT_GROUP_DEFAULTS_SETTING as _,resolveFmtCustomGroups as v}from"./fmt-groups.js";import{DBX_GITIGNORE_BLOCK as y,ensureDbxGitignore as b}from"./gitignore.js";import{MANIFEST_DIR as x,MANIFEST_FILE as S,TIMESTAMPS_FILE as C,readManifest as w,readSyncedAt as T,writeManifest as E}from"./manifest.js";import{addGlobalProviderRegistry as D,addProjectProviderRegistry as O,defaultGlobalProvidersDir as k,globalProviderRegistryPath as A,legacyProviderRegistryPath as j,providerRegistryPath as M,providerRegistryPaths as N,readAllProviders as P,readAllProvidersSync as F,readGlobalProviders as I,readProviderRegistry as L,removeGlobalProviderRegistry as R,removeProjectProviderRegistry as z,setGlobalProviderRegistries as B,setProjectProviderRegistries as V,writeGlobalProviders as H,writeProviderRegistry as U}from"./provider-registry.js";import{selectProjects as W}from"./select.js";import{resetProjects as G,resetToolchain as K}from"./reset.js";import{runSync as q,selectSyncTasks as J}from"./sync.js";import{vscodeSyncTask as Y}from"./vscode.js";import{DEFAULT_WATCH_GLOBS as X,resolveWatchGlobs as Z,resolveWatchInputFiles as Q,runWatch as $}from"./watch.js";var ee=/* @__PURE__ */ e({DBX_GITIGNORE_BLOCK:()=>y,DEFAULT_WATCH_GLOBS:()=>X,FORMAT_IMPORT_GROUP_DEFAULTS_ENV:()=>g,FORMAT_IMPORT_GROUP_DEFAULTS_SETTING:()=>_,IGNORED_DIRS:()=>l,MANIFEST_DIR:()=>x,MANIFEST_FILE:()=>S,TIMESTAMPS_FILE:()=>C,addGlobalProviderRegistry:()=>D,addProjectProviderRegistry:()=>O,buildProjectGraph:()=>u,defaultGlobalProvidersDir:()=>k,detectPackageManager:()=>d,detectProjectType:()=>r,editorConfigSyncTask:()=>t,ensureDbxGitignore:()=>b,findConfigFile:()=>a,findParentConfigFile:()=>o,globalProviderRegistryPath:()=>A,legacyProviderRegistryPath:()=>j,loadToolchainConfig:()=>s,mergeToolchainConfig:()=>c,orderProjects:()=>f,projectGraphPath:()=>p,providerRegistryPath:()=>M,providerRegistryPaths:()=>N,readAllProviders:()=>P,readAllProvidersSync:()=>F,readGlobalProviders:()=>I,readManifest:()=>w,readProjectGraph:()=>m,readProviderRegistry:()=>L,readSyncedAt:()=>T,removeGlobalProviderRegistry:()=>R,removeProjectProviderRegistry:()=>z,resetProjects:()=>G,resetToolchain:()=>K,resolveFmtCustomGroups:()=>v,resolveProjectType:()=>i,resolveWatchGlobs:()=>Z,resolveWatchInputFiles:()=>Q,runSync:()=>q,runWatch:()=>$,selectProjects:()=>W,selectSyncTasks:()=>J,setGlobalProviderRegistries:()=>B,setProjectProviderRegistries:()=>V,toolingConfigTask:()=>n,vscodeSyncTask:()=>Y,writeGlobalProviders:()=>H,writeManifest:()=>E,writeProjectGraph:()=>h,writeProviderRegistry:()=>U});export{y as DBX_GITIGNORE_BLOCK,X as DEFAULT_WATCH_GLOBS,g as FORMAT_IMPORT_GROUP_DEFAULTS_ENV,_ as FORMAT_IMPORT_GROUP_DEFAULTS_SETTING,l as IGNORED_DIRS,x as MANIFEST_DIR,S as MANIFEST_FILE,C as TIMESTAMPS_FILE,D as addGlobalProviderRegistry,O as addProjectProviderRegistry,u as buildProjectGraph,k as defaultGlobalProvidersDir,d as detectPackageManager,r as detectProjectType,t as editorConfigSyncTask,b as ensureDbxGitignore,a as findConfigFile,o as findParentConfigFile,A as globalProviderRegistryPath,j as legacyProviderRegistryPath,s as loadToolchainConfig,c as mergeToolchainConfig,f as orderProjects,p as projectGraphPath,M as providerRegistryPath,N as providerRegistryPaths,P as readAllProviders,F as readAllProvidersSync,I as readGlobalProviders,w as readManifest,m as readProjectGraph,L as readProviderRegistry,T as readSyncedAt,R as removeGlobalProviderRegistry,z as removeProjectProviderRegistry,G as resetProjects,K as resetToolchain,v as resolveFmtCustomGroups,i as resolveProjectType,Z as resolveWatchGlobs,Q as resolveWatchInputFiles,q as runSync,$ as runWatch,W as selectProjects,J as selectSyncTasks,B as setGlobalProviderRegistries,V as setProjectProviderRegistries,ee as src_exports,n as toolingConfigTask,Y as vscodeSyncTask,H as writeGlobalProviders,E as writeManifest,h as writeProjectGraph,U as writeProviderRegistry};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import{pathToFileURL as t}from"node:url";import.meta.url;import{deepMerge as n,isPlainObject as r}from"../../shared/src/object-utils.js";import{readJsonAt as i}from"../../shared/src/fs-utils.js";import{projectFromPackageJson as a}from"../../shared/src/project.js";import{CONFIG_FILE_NAMES as o,resolveTokens as s}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{resolveProjectType as c}from"./project-type.js";import{createRequire as l}from"node:module";import u from"node:fs";function d(e){return e instanceof Error?e.message:String(e)}function f(t=process.cwd()){for(let n of o){let r=e.resolve(t,n);if(u.existsSync(r))return r}}function p(t=process.cwd()){let n=e.resolve(t);if(u.existsSync(e.join(n,`.git`)))return;let r=e.dirname(n);for(;;){let t=f(r);if(t)return t;if(u.existsSync(e.join(r,`.git`)))return;let n=e.dirname(r);if(n===r)return;r=n}}function m(e){let t=e?.code;return t===`ERR_UNKNOWN_FILE_EXTENSION`||t===`ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`}function h(e){let t=e;for(let e=0;e<2&&t&&typeof t==`object`&&`default`in t&&Object.keys(t).every(e=>e==="default"||e==="__esModule");e++)t=t.default;return t}const g=l(import.meta.url);let _=0;async function v(e,n=!1){if(e.endsWith(`.json`))return JSON.parse(u.readFileSync(e,`utf-8`).replace(/^\uFEFF/,``));if(n)try{delete g.cache[e]}catch{}let r=t(e).href,i=n?`${r}?dbx=${Date.now()}-${++_}`:r;try{let e=await import(i);return e.default??e}catch(e){if(!m(e))throw e;let{tsImport:t}=await import(`tsx/esm/api`);return h(await t(i,import.meta.url))}}async function y(e,t=!1){let n=await b(await v(e,t)),r=n&&typeof n==`object`?n.toolchain:void 0;return r&&typeof r==`object`?r:{}}async function b(e){let t=await e;return typeof t==`function`&&(t=await t()),t}const x=/* @__PURE__ */ new Set([`name`,`scope`,`description`,`type`])
|
|
1
|
+
import{default as e}from"node:path";import{pathToFileURL as t}from"node:url";import.meta.url;import{deepMerge as n,isPlainObject as r}from"../../shared/src/object-utils.js";import{readJsonAt as i}from"../../shared/src/fs-utils.js";import{projectFromPackageJson as a}from"../../shared/src/project.js";import{CONFIG_FILE_NAMES as o,resolveTokens as s}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{resolveProjectType as c}from"./project-type.js";import{createRequire as l}from"node:module";import u from"node:fs";function d(e){return e instanceof Error?e.message:String(e)}function f(t=process.cwd()){for(let n of o){let r=e.resolve(t,n);if(u.existsSync(r))return r}}function p(t=process.cwd()){let n=e.resolve(t);if(u.existsSync(e.join(n,`.git`)))return;let r=e.dirname(n);for(;;){let t=f(r);if(t)return t;if(u.existsSync(e.join(r,`.git`)))return;let n=e.dirname(r);if(n===r)return;r=n}}function m(e){let t=e?.code;return t===`ERR_UNKNOWN_FILE_EXTENSION`||t===`ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`}function h(e){let t=e;for(let e=0;e<2&&t&&typeof t==`object`&&`default`in t&&Object.keys(t).every(e=>e==="default"||e==="__esModule");e++)t=t.default;return t}const g=l(import.meta.url);let _=0;async function v(e,n=!1){if(e.endsWith(`.json`))return JSON.parse(u.readFileSync(e,`utf-8`).replace(/^\uFEFF/,``));if(n)try{delete g.cache[e]}catch{}let r=t(e).href,i=n?`${r}?dbx=${Date.now()}-${++_}`:r;try{let e=await import(i);return e.default??e}catch(e){if(!m(e))throw e;let{tsImport:t}=await import(`tsx/esm/api`);return h(await t(i,import.meta.url))}}async function y(e,t=!1){let n=await b(await v(e,t)),r=n&&typeof n==`object`?n.toolchain:void 0;return r&&typeof r==`object`?r:{}}async function b(e){let t=await e;return typeof t==`function`&&(t=await t()),t}const x=/* @__PURE__ */ new Set([`name`,`scope`,`description`,`type`]);function S(e){if(!e)return;let t=Object.fromEntries(Object.entries(e).filter(([e])=>!x.has(e)));return Object.keys(t).length>0?t:void 0}const C=/* @__PURE__ */ new Set([`test`,`run`]);function w(e){if(!r(e))return e;let t=Object.fromEntries(Object.entries(e).filter(([e])=>!C.has(e)));return Object.keys(t).length>0?t:void 0}function T(e,t){let{hooks:r,project:i,ci:a,changelog:o,catalogs:s,tsconfig:c,vite:l,...u}=e,d=u,f=w(l);if(f!==void 0&&(d={...d,vite:f}),t.project?.inherit!==!1){let e=S(i);e&&(d={...d,project:e})}return n(d,t)}async function E(t=process.cwd(),n={}){if(n.config&&n.noConfig)throw Error("`--config` and `--no-config` cannot be used together.");let r=n.noConfig?void 0:n.config?e.isAbsolute(n.config)?n.config:e.resolve(t,n.config):f(t),o=n.noConfig?void 0:p(t),l=n.tolerant??!1,u=n.fresh??!1,m={},h={},g,_;if(o)try{g=await y(o,u),m=g}catch(e){if(!l)throw e;_=`failed to load ${o}: ${d(e)}`}if(r)try{let e=await y(r,u);h=e,m=o&&!_?T(m,e):e}catch(e){if(!l)throw e;_=`failed to load ${r}: ${d(e)}`}else g&&(m=T(g,{}));let v=i(t,`package.json`),b={...v?a(v):void 0,...m.project??void 0},x=s({...m,project:b});n.skipHooks||await m.hooks?.afterLoad?.({cwd:t,config:m,tokens:x,...r?{path:r}:{}});let S=m.tsconfig===void 0&&g?.tsconfig!==void 0?{...m,tsconfig:g.tsconfig}:m;return{config:m,ownConfig:h,...r?{path:r}:{},...o?{parentPath:o}:{},..._?{error:_}:{},tokens:x,projectType:c(t,S)}}export{f as findConfigFile,p as findParentConfigFile,E as loadToolchainConfig,T as mergeToolchainConfig};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { ProjectGraph } from "./graph.js";
|
|
3
4
|
//#region packages/core/src/select.d.ts
|
|
4
5
|
/** A project selected by {@link selectProjects}. */
|
|
5
6
|
export interface SelectedProject {
|
|
@@ -26,6 +27,8 @@ export interface SelectProjectsOptions {
|
|
|
26
27
|
kind?: 'all' | 'configured' | 'unconfigured';
|
|
27
28
|
/** Maximum directory depth to scan (default 5). */
|
|
28
29
|
maxDepth?: number;
|
|
30
|
+
/** Use an already-built graph instead of scanning the filesystem again. */
|
|
31
|
+
graph?: ProjectGraph;
|
|
29
32
|
}
|
|
30
33
|
/** Discover projects under a root, applying include/exclude + kind filters. */
|
|
31
34
|
export declare function selectProjects(options: SelectProjectsOptions): SelectedProject[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{buildProjectGraph as t}from"./graph.js";const n=/[*?[\]{}]/,r=`<<dbx-globstar>>`;function i(e){let t=e.replace(/[.+^${}()|\\]/g,`\\$&`).replace(/\*\*/g,r).replace(/\*/g,`[^/]*`).replaceAll(r,`.*`).replace(/\?/g,`.`);return RegExp(`^${t}$`,`i`)}function a(t,r){let a=[t.rel,t.name??``,e.basename(t.rel)];if(n.test(r)){let e=i(r);return a.some(t=>e.test(t))}let o=r.toLowerCase();return a.some(e=>e.toLowerCase().includes(o))}function o(n){let r=t(n.root,n.maxDepth===void 0?{}:{maxDepth:n.maxDepth}).projects.map(t=>({dir:e.resolve(n.root,t.dir),rel:t.dir,...t.name?{name:t.name}:{},hasConfig:t.hasConfig})),i=n.kind??`all`,o=n.include?.filter(Boolean)??[],s=n.exclude?.filter(Boolean)??[];return r.filter(e=>!(i===`configured`&&!e.hasConfig||i===`unconfigured`&&e.hasConfig||o.length>0&&!o.some(t=>a(e,t))||s.some(t=>a(e,t))))}export{o as selectProjects};
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{buildProjectGraph as t}from"./graph.js";const n=/[*?[\]{}]/,r=`<<dbx-globstar>>`;function i(e){let t=e.replace(/[.+^${}()|\\]/g,`\\$&`).replace(/\*\*/g,r).replace(/\*/g,`[^/]*`).replaceAll(r,`.*`).replace(/\?/g,`.`);return RegExp(`^${t}$`,`i`)}function a(t,r){let a=[t.rel,t.name??``,e.basename(t.rel)];if(n.test(r)){let e=i(r);return a.some(t=>e.test(t))}let o=r.toLowerCase();return a.some(e=>e.toLowerCase().includes(o))}function o(n){let r=(n.graph??t(n.root,n.maxDepth===void 0?{}:{maxDepth:n.maxDepth})).projects.map(t=>({dir:e.resolve(n.root,t.dir),rel:t.dir,...t.name?{name:t.name}:{},hasConfig:t.hasConfig})),i=n.kind??`all`,o=n.include?.filter(Boolean)??[],s=n.exclude?.filter(Boolean)??[];return r.filter(e=>!(i===`configured`&&!e.hasConfig||i===`unconfigured`&&e.hasConfig||o.length>0&&!o.some(t=>a(e,t))||s.some(t=>a(e,t))))}export{o as selectProjects};
|
|
@@ -8,6 +8,8 @@ import "../../shared/src/index.js";
|
|
|
8
8
|
export interface RunSyncOptions {
|
|
9
9
|
/** The task list to run. */
|
|
10
10
|
tasks: SyncTask[];
|
|
11
|
+
/** Only run the named task(s); implies `prune: false`. */
|
|
12
|
+
only?: string[];
|
|
11
13
|
/** The project root. */
|
|
12
14
|
cwd: string;
|
|
13
15
|
/** The loaded config. */
|
|
@@ -20,6 +22,8 @@ export interface RunSyncOptions {
|
|
|
20
22
|
projectType?: ProjectType;
|
|
21
23
|
/** Dry-run: report drift and exit non-zero without writing. */
|
|
22
24
|
check?: boolean;
|
|
25
|
+
/** Remove managed files no longer produced by the active tasks (default true). */
|
|
26
|
+
prune?: boolean;
|
|
23
27
|
/** Suppress logging. */
|
|
24
28
|
quiet?: boolean;
|
|
25
29
|
/** Custom logger (default `logger.info`). */
|
|
@@ -43,6 +47,8 @@ export interface SyncResult {
|
|
|
43
47
|
/** Whether disk already matched the generated output. */
|
|
44
48
|
upToDate: boolean;
|
|
45
49
|
}
|
|
50
|
+
/** Select sync tasks by name; throws when a name is unknown. */
|
|
51
|
+
export declare function selectSyncTasks(tasks: SyncTask[], only: string[]): SyncTask[];
|
|
46
52
|
/**
|
|
47
53
|
* Run every enabled sync task, writing the managed files and pruning files that
|
|
48
54
|
* are no longer generated. With `check: true` nothing is written: drift is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{logger as t}from"../../shared/src/logger.js";import"../../shared/src/index.js";import{
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{logger as t}from"../../shared/src/logger.js";import"../../shared/src/index.js";import{resolveProjectType as n}from"./project-type.js";import{ensureDbxGitignore as r}from"./gitignore.js";import{readManifest as i,writeManifest as a}from"./manifest.js";import{resolveManagedPath as o}from"./paths.js";import s from"node:fs";function c(e){return e.replace(/\\/g,`/`)}function l(e,t){let n=new Map(e.map(e=>[e.name,e])),r=t.filter(e=>!n.has(e));if(r.length>0)throw Error(`unknown sync task(s): ${r.join(`, `)} (available: ${e.map(e=>e.name).join(`, `)})`);return t.map(e=>n.get(e))}async function u(u){let{cwd:d,config:f,ownConfig:p,tokens:m}=u,h=u.only&&u.only.length>0?u.only:void 0,g=h?l(u.tasks,h):u.tasks,_=!h&&u.prune!==!1,v=u.quiet?()=>{}:u.log??(e=>t.info(e)),y=u.quiet?()=>{}:(e,n)=>t.warn(e,n),b=u.projectType??n(d,f),x=i(d),S={cwd:d,projectType:b,config:f,ownConfig:p??f,tokens:m,log:v,warn:y,check:u.check===!0,managedFiles:x.files,manifest:{...x.extras,...x.tsconfigOverrides?{tsconfigOverrides:x.tsconfigOverrides}:{},...x.snapshots?{snapshots:x.snapshots}:{}}},C=f.hooks??{};await C.beforeSync?.(S);let w=g.filter(e=>(!e.projectTypes||e.projectTypes.includes(b))&&(!e.enabled||e.enabled(f)));v(`running ${w.length} task(s)${u.check?` (check)`:``} [${b}]`);let T=[];for(let e of w){v(` - ${e.name}`),await C.beforeTask?.({task:e,ctx:S});let t=await e.run(S),n=Array.isArray(t)?t:void 0;n&&T.push(...n),await C.afterTask?.({task:e,ctx:S,...n?{files:n}:{}})}for(let e of T)o(d,e.path);let E=new Map(T.map(t=>{let n=o(d,t.path);return[c(e.relative(d,n)),t.content]})),D=new Set(T.filter(e=>e.track===!1).map(e=>c(e.path))),O=/* @__PURE__ */ new Set;for(let e of g){if(e.projectTypes&&!e.projectTypes.includes(b))continue;let t=typeof e.keep==`function`?e.keep(f):e.keep??[];for(let e of t)O.add(e)}let k=e=>{for(let t of O)if(e===t||e.endsWith(`/${t}`)||e.endsWith(t))return!0;return!1},A=[];for(let[t,n]of E){let r=e.resolve(d,t);(s.existsSync(r)?s.readFileSync(r,`utf-8`):void 0)!==n&&A.push(t)}let j=new Map([...E.keys()].map(t=>[t,s.existsSync(e.resolve(d,t))])),M=e=>x.origins?.[e]||(x.files.includes(e)||j.get(e)?`adopted`:`created`),N=[],P=[];for(let e of x.files){if(!_||E.has(e)||D.has(e)||k(e)||M(e)!==`created`)continue;let t;try{t=o(d,e)}catch(t){y(`sync: ignoring unsafe manifest path "${e}": ${t instanceof Error?t.message:String(t)}`);continue}s.existsSync(t)&&(N.push(e),P.push({path:e,content:s.readFileSync(t,`utf-8`)}))}let F=A.length===0&&N.length===0;if(u.check){if(F)v(`generated files are in sync.`);else{v(`generated files are out of date:`);for(let e of A)v(` M ${e}`);for(let e of N)v(` D ${e}`);v("Run `dbx sync` to regenerate them.")}let e={written:[],changed:A,removed:N,removedFiles:P,upToDate:F};return await C.afterSync?.({cwd:d,config:f,result:e}),e}let I=[];for(let[t,n]of E){let r=e.resolve(d,t);s.mkdirSync(e.dirname(r),{recursive:!0}),s.writeFileSync(r,n,`utf-8`),I.push(t)}for(let t of N)s.rmSync(e.resolve(d,t),{force:!0});let L=[.../* @__PURE__ */ new Set([..._?[]:x.files,...E.keys()])].filter(e=>!D.has(e)),R={};for(let e of L)R[e]=M(e);a(d,L,void 0,R,S.manifest),r(d)&&v(` I .gitignore (added the .dbx ignore block)`),v(`wrote ${I.length}, removed ${N.length} file(s)${A.length?`, updated ${A.length}`:``}.`);let z={written:I,changed:A,removed:N,removedFiles:P,upToDate:F};return await C.afterSync?.({cwd:d,config:f,result:z}),z}export{u as runSync,l as selectSyncTasks};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
3
|
import { ProjectType } from "../../shared/src/config-types.js";
|
|
4
|
+
import { ProjectGraph } from "./graph.js";
|
|
4
5
|
import { RunSyncOptions } from "./sync.js";
|
|
5
6
|
import { SyncTask, ToolchainConfig } from "../../shared/src/toolchain.js";
|
|
7
|
+
import { TsconfigFileNameSet } from "../../shared/src/tsconfig-files.js";
|
|
6
8
|
import "../../shared/src/index.js";
|
|
7
9
|
//#region packages/core/src/watch.d.ts
|
|
8
10
|
export interface RunWatchOptions extends Omit<RunSyncOptions, 'check'> {
|
|
@@ -21,6 +23,45 @@ export interface RunWatchOptions extends Omit<RunSyncOptions, 'check'> {
|
|
|
21
23
|
* resolved against the config (eg. custom tsconfig file names).
|
|
22
24
|
*/
|
|
23
25
|
export declare function resolveWatchGlobs(tasks: SyncTask[], config: ToolchainConfig, projectType?: ProjectType): string[];
|
|
26
|
+
/**
|
|
27
|
+
* The legacy/default watch globs. The extension resolves these to concrete,
|
|
28
|
+
* non-recursive repo-relative files via {@link resolveWatchInputFiles}; this
|
|
29
|
+
* const is exported for consumers that still want the wide patterns.
|
|
30
|
+
*/
|
|
31
|
+
export declare const DEFAULT_WATCH_GLOBS: readonly ['**/dbx.config.*', 'tsconfig.workspaces.json', '**/tsconfig.default.json'];
|
|
32
|
+
export interface ResolveWatchInputFilesOptions {
|
|
33
|
+
/** Repo root. */
|
|
34
|
+
cwd: string;
|
|
35
|
+
/** The merged root config. */
|
|
36
|
+
config: ToolchainConfig;
|
|
37
|
+
/** The detected/config project type. */
|
|
38
|
+
projectType?: ProjectType;
|
|
39
|
+
/** The sync tasks to derive task-level inputs from. */
|
|
40
|
+
tasks?: SyncTask[];
|
|
41
|
+
/** A prebuilt project graph (default: built from `cwd`). */
|
|
42
|
+
graph?: ProjectGraph;
|
|
43
|
+
/** Explicit user globs; when set they replace the resolved inputs. */
|
|
44
|
+
userGlobs?: string[];
|
|
45
|
+
/** Extra glob(s) to exclude. */
|
|
46
|
+
exclude?: string | string[];
|
|
47
|
+
/** Respect `.gitignore` files (default true). */
|
|
48
|
+
gitignore?: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface ResolvedWatchInputFiles {
|
|
51
|
+
/** Concrete, repo-relative (posix), non-recursive paths to watch. */
|
|
52
|
+
globs: string[];
|
|
53
|
+
/** Every `dbx.config.*` path. */
|
|
54
|
+
configs: string[];
|
|
55
|
+
/** The root tsconfig file names (drives project detection). */
|
|
56
|
+
tsconfig: TsconfigFileNameSet;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Resolve the exact files the auto-sync watcher should watch. Unlike the legacy
|
|
60
|
+
* recursive globs, this uses the project graph (plus each project's own config)
|
|
61
|
+
* so only the necessary config/tsconfig files are watched, and custom file names
|
|
62
|
+
* are honoured.
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveWatchInputFiles(options: ResolveWatchInputFilesOptions): Promise<ResolvedWatchInputFiles>;
|
|
24
65
|
/**
|
|
25
66
|
* Run one sync, then watch the config file + every task's `watch` globs and
|
|
26
67
|
* re-run on change. Writing generated files must not re-trigger a run, so a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{isIgnoredPath as
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{deepMerge as t}from"../../shared/src/object-utils.js";import{isIgnoredPath as n,resolveIgnorePatterns as r}from"../../shared/src/ignore.js";import{logger as i}from"../../shared/src/logger.js";import{sectionConfig as a,sectionEnabled as o}from"../../shared/src/toolchain.js";import{tsconfigFileNames as s}from"../../shared/src/tsconfig-files.js";import"../../shared/src/index.js";import{resolveProjectType as c}from"./project-type.js";import{findConfigFile as l,loadToolchainConfig as u}from"./loader.js";import{buildProjectGraph as d}from"./graph.js";import{runSync as f,selectSyncTasks as p}from"./sync.js";import m from"node:fs";import{globSync as h}from"glob";function g(e,t,n){let r=/* @__PURE__ */ new Set;for(let i of e){if(n&&i.projectTypes&&!i.projectTypes.includes(n)||i.enabled&&!i.enabled(t))continue;let e=typeof i.watch==`function`?i.watch(t):i.watch??[];for(let t of e)r.add(t)}return[...r]}const _=[`**/dbx.config.*`,`tsconfig.workspaces.json`,`**/tsconfig.default.json`];function v(t,n){return e.relative(t,n).replace(/\\/g,`/`)}function y(e){let t=e.replace(/\\/g,`/`);return!t||t.startsWith(`/`)||/^[a-zA-Z]:/.test(t)?!1:t.split(`/`).every(e=>e!==`..`)}async function b(i){let c=e.resolve(i.cwd),f=s(i.config),p=i.userGlobs;if(p)return{globs:[...new Set(p)].filter(y),configs:[],tsconfig:f};let g=i.graph??d(c),_=r(c,{...i.exclude===void 0?{}:{exclude:i.exclude},...i.gitignore===void 0?{}:{gitignore:i.gitignore}}),b=/* @__PURE__ */ new Set,x=/* @__PURE__ */ new Set,S=t=>{if(!t||t===`.`||e.isAbsolute(t))return;let r=t.replace(/\\/g,`/`).replace(/^\.\//,``);y(r)&&(n(r,_)||b.add(r))},C=t=>{m.existsSync(e.resolve(c,t))&&S(t)};for(let e of g.projects){let t=e.config;e.hasConfig&&t&&(S(t),x.add(t))}let w=l(c);if(w){let e=v(c,w);S(e),x.add(e)}let T=o(i.config.tsconfig),E=a(i.config.tsconfig)??{};for(let n of g.projects){let r=e.resolve(c,n.dir),l;if(n.dir!==`.`&&n.hasConfig)try{l=(await u(r,{tolerant:!0,skipHooks:!0})).ownConfig?.tsconfig}catch{l=void 0}if(!T||l!==void 0&&!o(l))continue;let d=l!==void 0&&typeof l==`object`?a(l)??{}:{},f=t(E,d),p=s({...i.config,tsconfig:f}),m=n.dir===`.`?``:`${n.dir}/`;C(`${m}${p.defaultFile}`),C(`${m}${p.baseFile}`),n.dir===`.`&&C(p.rootFile)}for(let e of h(`**/${f.defaultFile}`,{cwd:c,nodir:!0,ignore:_}))S(e);for(let e of i.tasks??[]){if(e.enabled&&!e.enabled(i.config))continue;let t=typeof e.watch==`function`?e.watch(i.config):e.watch??[];for(let e of t){if(!e.includes(`**`)){C(e);continue}let t=e.replace(/^\*\*\//,``);for(let e of g.projects)C(`${e.dir===`.`?``:`${e.dir}/`}${t}`)}}return{globs:[...b].sort(),configs:[...x].sort(),tsconfig:f}}async function x(t){let{cwd:o}=t,s=t.only&&t.only.length>0?p(t.tasks,t.only):t.tasks,d=t.configPath?e.resolve(o,t.configPath):void 0,h=t.quiet?()=>{}:t.log??(e=>i.info(e)),g={...t},_=[],v=[],y=0,x,S=!1,C=!1,w=!1,T=!1,E=()=>a(g.config.watch)?.debounce??t.debounce??150,D=()=>{for(let e of v)e.close();v=[]},O=async()=>{let e=t.configPath?l(o):void 0,n=d&&m.existsSync(d)?d:e;if(!n)return!1;d=n;try{let e=await u(o,{config:n,fresh:!0});return g={...g,config:e.config,ownConfig:e.ownConfig,tokens:e.tokens,projectType:e.projectType},!0}catch(e){return i.error(`failed to reload ${d}: ${e instanceof Error?e.message:String(e)}`),!1}},k=async()=>{if(S)C=!0;else{S=!0;try{w&&(w=!1,await O()&&(T=!0)),await f(g)}catch(e){i.error(`sync failed: ${e instanceof Error?e.message:String(e)}`)}finally{S=!1,y=Date.now()+Math.max(E()*3,300),T&&(T=!1,await N()),C&&(C=!1,A())}}},A=()=>{clearTimeout(x),x=setTimeout(()=>{k()},E())},j=t=>{let r=!1;if(t){let i=e.relative(o,t).replace(/\\/g,`/`);if(n(i,_))return;r=e.basename(t).startsWith(`dbx.config.`),r&&(w=!0)}Date.now()<y&&!r||(g.config?.hooks?.onChange?.(t?{path:t}:{}),A())},M=e=>{e.on(`error`,e=>{i.error(`watch error: ${e instanceof Error?e.message:String(e)}`)}),v.push(e)};async function N(){D();let n=a(g.config.watch);_=r(o,{...(n?.exclude??t.exclude)===void 0?{}:{exclude:n?.exclude??t.exclude},...(n?.gitignore??t.gitignore)===void 0?{}:{gitignore:n?.gitignore??t.gitignore}});let i=g.projectType??c(o,g.config),l=await b({cwd:o,config:g.config,projectType:i,tasks:s,...n?.exclude??t.exclude?{exclude:n?.exclude??t.exclude}:{},...n?.gitignore??t.gitignore?{gitignore:n?.gitignore??t.gitignore}:{}});if(d)try{M(m.watch(d,()=>{h(`config changed; re-syncing`),w=!0,j(d)}))}catch{}for(let t of l.globs){let n=e.resolve(o,t);try{M(m.watch(n,()=>j(n)))}catch{}}}await k(),await N(),h(`watching for changes (Ctrl+C to stop)`),await new Promise(e=>{let t=()=>{x&&clearTimeout(x),x=void 0,D(),process.off(`SIGINT`,t),process.off(`SIGTERM`,t),e()};process.on(`SIGINT`,t),process.on(`SIGTERM`,t)})}export{_ as DEFAULT_WATCH_GLOBS,g as resolveWatchGlobs,b as resolveWatchInputFiles,x as runWatch};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{logger as t}from"../../../shared/src/logger.js";import"../../../shared/src/index.js";import{loadToolchainConfig as n}from"../../../core/src/loader.js";import{selectProjects as r}from"../../../core/src/select.js";import{runSync as i}from"../../../core/src/sync.js";import"../../../core/src/index.js";import{diffFiles as a,hasPending as o}from"../check.js";import{listMigrations as
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{logger as t}from"../../../shared/src/logger.js";import"../../../shared/src/index.js";import{loadToolchainConfig as n}from"../../../core/src/loader.js";import{selectProjects as r}from"../../../core/src/select.js";import{runSync as i}from"../../../core/src/sync.js";import"../../../core/src/index.js";import{diffFiles as a,hasPending as o}from"../check.js";import{viteConfigHasFmtLint as s}from"../vite.js";import{listMigrations as c,migrations as l}from"../registry.js";import u from"node:fs";import{cancel as d,isCancel as f,multiselect as p}from"@clack/prompts";function m(e){return!!(process.stdin.isTTY&&process.stdout.isTTY)&&e.json!==!0}function h(){d(`Cancelled.`),process.exitCode=1}function g(){return[{name:`migrate`,description:`Migrate Biome / ESLint / Prettier / Dprint / Oxc config, or fold vite.config.* into dbx.config.`,options:[{flags:`--from <tool>`,description:`Source tool (repeatable): biome | eslint | prettier | dprint | oxc | vite | all.`,multiple:!0},{flags:`--to <tool>`,description:`Target tool (default: oxc).`,default:`oxc`},{flags:`--cwd <dir>`,description:`Project root (default: cwd).`},{flags:`--recursive`,description:`Also migrate the discovered projects under the root (default: root only).`},{flags:`--write`,description:`Write the files (default: dry-run).`},{flags:`--dry-run`,description:`Do not write anything (default).`},{flags:`--check`,description:`CI: exit non-zero when the oxc config is stale.`},{flags:`--target <target>`,description:`files (default) | vite.`},{flags:`--online`,description:`Allow network (e.g. @oxlint/migrate).`},{flags:`--ignore-vite-config-file`,description:"Do not remove the folded `vite.config.*`."},{flags:`--ignore-managed-files`,description:`Skip the post-migration sync (leave the toolchain-managed files as-is).`},{flags:`--ignore-changelog`,description:`Skip the changelog task in the post-migration sync.`},{flags:`--json`,description:`Print the result as JSON.`}],run:async(c,d)=>{let g=c.cwd??d.cwd,_=!!c.check,v=!!c.write&&!c.dryRun&&!_,y=!!c.online,b=c.from,x=Array.isArray(b)?b:b?[b]:[],S=x.includes(`all`),C=x.filter(e=>e!==`all`),w=e=>x.length===0||S||C.includes(e.from),T=c.target??`files`,E=String(c.to??`oxc`);if(E!==`oxc`)throw Error(`--to ${E} is not supported (only 'oxc').`);let D=!!c.recursive,O=e=>{let t=l().filter(t=>w(t)&&t.detect(e));if(x.length>0)return t;let n=new Map(t.map(e=>[e.id,e])),r=[],i=n.get(`biome-to-oxc`);if(i)r.push(i);else{let e=[`prettier-to-oxc`,`dprint-to-oxc`].map(e=>n.get(e)).find(Boolean);e&&r.push(e);let t=n.get(`eslint-to-oxc`);t&&r.push(t)}for(let e of[`oxc-to-toolchain`,`vite-to-toolchain`]){let t=n.get(e);t&&r.push(t)}return r},k=[g];if(D){let n=r({root:g}).filter(e=>O(e.dir).length>0);if(n.length===0){t.info(`nothing to migrate under ${g}.`);return}let i=n;if(m(c)){let t=await p({message:`Which projects should I migrate?`,required:!0,options:[{value:`__all__`,label:`All projects`},...n.map(t=>({value:t.dir,label:t.rel===`.`?e.basename(g):t.rel,...t.name?{hint:t.name}:{}}))]});if(f(t)){h();return}let r=t;i=r.includes(`__all__`)?n:n.filter(e=>r.includes(e.dir))}k=i.map(e=>e.dir)}let A=c.target!==void 0,j=e=>x.length===0||S||C.includes(e),M=[];for(let e of k){let t=A?void 0:s(e),n=!A&&j(`vite`)&&T===`files`&&t&&(t.fmt||t.lint)?`vite`:T,r=async t=>{M.push({dir:e,result:await t.run({cwd:e,write:v,online:y,target:n,ignoreViteConfigFile:!!c.ignoreViteConfigFile,ignoreManagedFiles:!!c.ignoreManagedFiles,ignoreChangelog:!!c.ignoreChangelog})})},i=O(e);for(let e of i)e.id!==`oxc-to-toolchain`&&e.id!==`vite-to-toolchain`&&await r(e);let a=j(`oxc`)?l().find(e=>e.id===`oxc-to-toolchain`):void 0;a&&a.detect(e)&&await r(a);let o=j(`vite`)?l().find(e=>e.id===`vite-to-toolchain`):void 0;o&&o.detect(e)&&await r(o)}if(M.length===0){let e=l().some(e=>w(e));t.info(C.length>0&&!S&&!e?`no migration registered for: ${C.join(`, `)}.`:`nothing to migrate (no Biome/ESLint/Prettier/Dprint/Oxc/vite config detected).`);return}let N=t=>D?`${e.relative(g,t)||`.`}: `:``,P=[...new Set(M.filter(({result:e})=>e.written.length>0||(e.removed?.length??0)>0).map(({dir:e})=>e))];if(_){let n=M.flatMap(({result:e})=>a(e.files??[])),r=n.filter(e=>e.status!==`same`),i=M.flatMap(({result:e})=>e.removed??[]).filter(e=>u.existsSync(e));if(c.json)t.raw(JSON.stringify(M.map(e=>e.result),null,4));else if(r.length||i.length){for(let n of r)t.info(`${n.status} ${e.relative(g,n.path)||n.path}`);for(let n of i)t.info(`D ${e.relative(g,n)||n}`);t.info(`${r.length+i.length} file(s) out of date — run \`migrate --write\` to apply.`)}else t.info(`up to date.`);(o(n)||i.length>0)&&(process.exitCode=1);return}let F=async()=>{if(!v||P.length===0||c.ignoreManagedFiles||!d.syncTasks?.length)return;let e=c.ignoreChangelog?d.syncTasks.filter(e=>e.name!==`changelog`):d.syncTasks;for(let r of P){let a=await n(r);c.json||t.info(`${N(r)}regenerating managed files.`),await i({tasks:e,cwd:r,projectType:a.projectType,config:a.config,ownConfig:a.ownConfig,tokens:a.tokens,quiet:c.json===!0})}};if(c.json)await F(),t.raw(JSON.stringify(M.map(e=>e.result),null,4));else{for(let{dir:e,result:n}of M){t.info(`${N(e)}${n.from} -> ${n.to} ${v?`wrote`:`would write`}`);for(let e of n.written)t.info(` ${v?`+`:`?`} ${e}`);for(let e of n.removed??[])t.info(` ${v?`-`:`?`} ${e}`);for(let e of n.notes??[])t.info(` ${e}`);if(n.unmapped?.length){t.info(` unmapped (${n.unmapped.length}):`);for(let e of n.unmapped.slice(0,25))t.info(` - ${e.source}: ${e.reason}`)}}!v&&P.length>0&&!c.ignoreManagedFiles&&t.info(`managed files are regenerated after --write; pass --ignore-managed-files to skip.`),await F(),v||t.info(`dry-run — re-run with --write to apply.`)}}},{name:`migrate:list`,description:`List the registered migrations and whether each is detected.`,options:[{flags:`--cwd <dir>`,description:`Project root (default: cwd).`},{flags:`--json`,description:`Print as JSON.`}],run:(e,n)=>{let r=e.cwd??n.cwd,i=c(r);if(e.json)t.raw(JSON.stringify(i,null,4));else for(let e of i)t.info(` ${e.id.padEnd(16)} ${e.from} -> ${e.to} [${e.detected?`detected`:`not found`}]`),t.info(` ${e.description}`)}}]}export{g as migrateCommands};
|
|
@@ -11,6 +11,6 @@ import { DEFAULT_IGNORE, OxfmtMapping, mapBiomeFormatter, mapBiomeIncludes, mapB
|
|
|
11
11
|
import { OxlintMapping, RULE_MAP, mapBiomeToOxlint } from "./oxlint-map.js";
|
|
12
12
|
import { findPrettierConfig, hasPrettierConfig, mapPrettierToOxfmt, prettierToOx, readPrettierIgnore } from "./prettier.js";
|
|
13
13
|
import { MigrationInfo, detectMigrations, findMigration, listMigrations, migrations, runDetectedMigrations, runMigration } from "./registry.js";
|
|
14
|
-
import { VITE_CONFIG_FILES, ensureViteFmtIgnore, extractViteObject, findDbxConfig, findViteConfig, foldToolchainSection, foldViteIntoConfig, mergeViteObjects, renderFreshSectionsConfig, scanLiteralObject, viteToToolchain } from "./vite.js";
|
|
15
|
-
import { findTopLevelValue, matchBracket, mergeViteConfig, renderViteTarget, serializeTs, writeViteTarget } from "./vite-target.js";
|
|
16
|
-
export { BIOME_CONFIG_FILES, DEFAULT_IGNORE, FileDiff, FileStatus, MigrateTarget, MigrateTool, MigrationContext, MigrationFile, MigrationInfo, MigrationResult, OXC_FMT_FILE, OXC_LINT_FILE, OxfmtMapping, OxlintMapping, RULE_MAP, ToolchainMigration, UnmappedItem, VITE_CONFIG_FILES, biomeToOx, detectMigrations, diffFiles, dprintToOx, ensureViteFmtIgnore, eslintToOx, extractViteObject, findBiomeConfig, findDbxConfig, findDprintConfig, findEslintConfig, findMigration, findOxcConfigs, findPrettierConfig, findTopLevelValue, findViteConfig, foldToolchainSection, foldViteIntoConfig, hasPending, hasPrettierConfig, listMigrations, mapBiomeFormatter, mapBiomeIncludes, mapBiomeToOxfmt, mapBiomeToOxlint, mapDprintToOxfmt, mapOrganizeImports, mapPrettierToOxfmt, mapRuleName, matchBracket, mergeViteConfig, mergeViteObjects, migrateCommands, migrations, oxcToToolchain, prettierToOx, readJsonc, readPrettierIgnore, renderFreshSectionsConfig, renderViteTarget, runDetectedMigrations, runMigration, runOxlintMigrate, scanLiteralObject, serializeTs, stripJsonc, viteToToolchain, writeViteTarget };
|
|
14
|
+
import { VITE_CONFIG_FILES, ensureViteFmtIgnore, extractViteObject, findDbxConfig, findViteConfig, foldToolchainSection, foldViteIntoConfig, mergeViteObjects, objectHasSections, renderFreshSectionsConfig, renderFreshViteConfig, scanLiteralObject, viteConfigHasFmtLint, viteToToolchain } from "./vite.js";
|
|
15
|
+
import { findTopLevelValue, findViteMergeObject, matchBracket, mergeViteConfig, renderViteTarget, serializeTs, writeViteTarget } from "./vite-target.js";
|
|
16
|
+
export { BIOME_CONFIG_FILES, DEFAULT_IGNORE, FileDiff, FileStatus, MigrateTarget, MigrateTool, MigrationContext, MigrationFile, MigrationInfo, MigrationResult, OXC_FMT_FILE, OXC_LINT_FILE, OxfmtMapping, OxlintMapping, RULE_MAP, ToolchainMigration, UnmappedItem, VITE_CONFIG_FILES, biomeToOx, detectMigrations, diffFiles, dprintToOx, ensureViteFmtIgnore, eslintToOx, extractViteObject, findBiomeConfig, findDbxConfig, findDprintConfig, findEslintConfig, findMigration, findOxcConfigs, findPrettierConfig, findTopLevelValue, findViteConfig, findViteMergeObject, foldToolchainSection, foldViteIntoConfig, hasPending, hasPrettierConfig, listMigrations, mapBiomeFormatter, mapBiomeIncludes, mapBiomeToOxfmt, mapBiomeToOxlint, mapDprintToOxfmt, mapOrganizeImports, mapPrettierToOxfmt, mapRuleName, matchBracket, mergeViteConfig, mergeViteObjects, migrateCommands, migrations, objectHasSections, oxcToToolchain, prettierToOx, readJsonc, readPrettierIgnore, renderFreshSectionsConfig, renderFreshViteConfig, renderViteTarget, runDetectedMigrations, runMigration, runOxlintMigrate, scanLiteralObject, serializeTs, stripJsonc, viteConfigHasFmtLint, viteToToolchain, writeViteTarget };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:path";import"node:url";import.meta.url;import{DEFAULT_IGNORE as e,mapBiomeFormatter as t,mapBiomeIncludes as n,mapBiomeToOxfmt as r,mapOrganizeImports as i}from"./oxfmt-map.js";import{RULE_MAP as a,mapBiomeToOxlint as o}from"./oxlint-map.js";import{findTopLevelValue as s,
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;import{DEFAULT_IGNORE as e,mapBiomeFormatter as t,mapBiomeIncludes as n,mapBiomeToOxfmt as r,mapOrganizeImports as i}from"./oxfmt-map.js";import{RULE_MAP as a,mapBiomeToOxlint as o}from"./oxlint-map.js";import{findTopLevelValue as s,findViteMergeObject as c,matchBracket as l,mergeViteConfig as u,renderViteTarget as d,serializeTs as f,writeViteTarget as p}from"./vite-target.js";import{BIOME_CONFIG_FILES as m,biomeToOx as h,findBiomeConfig as g,readJsonc as _,stripJsonc as v}from"./biome.js";import{diffFiles as y,hasPending as b}from"./check.js";import{dprintToOx as x,findDprintConfig as S,mapDprintToOxfmt as C}from"./dprint.js";import{eslintToOx as w,findEslintConfig as T,mapRuleName as E,runOxlintMigrate as D}from"./eslint.js";import{VITE_CONFIG_FILES as O,ensureViteFmtIgnore as k,extractViteObject as A,findDbxConfig as j,findViteConfig as M,foldToolchainSection as N,foldViteIntoConfig as P,mergeViteObjects as F,objectHasSections as I,renderFreshSectionsConfig as L,renderFreshViteConfig as R,scanLiteralObject as z,viteConfigHasFmtLint as B,viteToToolchain as V}from"./vite.js";import{OXC_FMT_FILE as H,OXC_LINT_FILE as U,findOxcConfigs as W,oxcToToolchain as G}from"./oxc.js";import{findPrettierConfig as K,hasPrettierConfig as q,mapPrettierToOxfmt as J,prettierToOx as Y,readPrettierIgnore as X}from"./prettier.js";import{detectMigrations as Z,findMigration as Q,listMigrations as $,migrations as ee,runDetectedMigrations as te,runMigration as ne}from"./registry.js";import{migrateCommands as re}from"./cli/index.js";export{m as BIOME_CONFIG_FILES,e as DEFAULT_IGNORE,H as OXC_FMT_FILE,U as OXC_LINT_FILE,a as RULE_MAP,O as VITE_CONFIG_FILES,h as biomeToOx,Z as detectMigrations,y as diffFiles,x as dprintToOx,k as ensureViteFmtIgnore,w as eslintToOx,A as extractViteObject,g as findBiomeConfig,j as findDbxConfig,S as findDprintConfig,T as findEslintConfig,Q as findMigration,W as findOxcConfigs,K as findPrettierConfig,s as findTopLevelValue,M as findViteConfig,c as findViteMergeObject,N as foldToolchainSection,P as foldViteIntoConfig,b as hasPending,q as hasPrettierConfig,$ as listMigrations,t as mapBiomeFormatter,n as mapBiomeIncludes,r as mapBiomeToOxfmt,o as mapBiomeToOxlint,C as mapDprintToOxfmt,i as mapOrganizeImports,J as mapPrettierToOxfmt,E as mapRuleName,l as matchBracket,u as mergeViteConfig,F as mergeViteObjects,re as migrateCommands,ee as migrations,I as objectHasSections,G as oxcToToolchain,Y as prettierToOx,_ as readJsonc,X as readPrettierIgnore,L as renderFreshSectionsConfig,R as renderFreshViteConfig,d as renderViteTarget,te as runDetectedMigrations,ne as runMigration,D as runOxlintMigrate,z as scanLiteralObject,f as serializeTs,v as stripJsonc,B as viteConfigHasFmtLint,V as viteToToolchain,p as writeViteTarget};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{readManifest as t}from"../../core/src/manifest.js";import"../../core/src/index.js";import{serializeTs as n}from"./vite-target.js";import{readJsonc as r}from"./biome.js";import{foldToolchainSection as i,renderFreshSectionsConfig as
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{readManifest as t}from"../../core/src/manifest.js";import"../../core/src/index.js";import{serializeTs as n}from"./vite-target.js";import{readJsonc as r}from"./biome.js";import{foldToolchainSection as i,foldViteIntoConfig as a,renderFreshSectionsConfig as o,renderFreshViteConfig as s}from"./vite.js";import c from"node:fs";const l=`.oxfmtrc.json`,u=`.oxlintrc.json`;function d(e,n){try{return t(e).files.includes(n)}catch{return!1}}function f(t){let n=e.join(t,l),r=e.join(t,u);return{...c.existsSync(n)&&!d(t,`.oxfmtrc.json`)?{fmt:n}:{},...c.existsSync(r)&&!d(t,`.oxlintrc.json`)?{lint:r}:{}}}function p(e){let{$schema:t,...n}=e;return n}function m(t){for(let n of[`dbx.config.ts`,`dbx.config.mts`,`dbx.config.js`,`dbx.config.mjs`,`dbx.config.cjs`,`dbx.config.json`]){let r=e.join(t,n);if(c.existsSync(r))return r}}const h={id:`oxc-to-toolchain`,from:`oxc`,to:`toolchain`,description:`Fold .oxfmtrc.json / .oxlintrc.json into toolchain.fmt/lint.oxc.`,detect:e=>!!(f(e).fmt||f(e).lint),run:async t=>{let l=f(t.cwd);if(!l.fmt&&!l.lint)throw Error(`oxc-to-toolchain: no Oxc config found.`);let u=l.fmt?p(r(l.fmt)):void 0,d=l.lint?p(r(l.lint)):void 0,g=[...l.fmt?[`Source: ${e.basename(l.fmt)} (Oxfmt).`]:[],...l.lint?[`Source: ${e.basename(l.lint)} (Oxlint).`]:[]],_=(t.target??`files`)===`vite`,v=[...u?[{key:`fmt`,objectText:n({oxc:u})}]:[],...d?[{key:`lint`,objectText:n({oxc:d})}]:[]],y=_?n({...u?{fmt:u}:{},...d?{lint:d}:{}}):void 0,b=m(t.cwd),x,S;if(!b)x=e.join(t.cwd,`dbx.config.ts`),S=_?s(y):o(v);else if(b.endsWith(`.json`))return{id:h.id,from:`oxc`,to:`toolchain`,written:[],files:[],oxfmt:u,oxlint:d,unmapped:[{source:e.basename(b),reason:`JSON configs cannot hold the folded object by text-splice`}],notes:[...g,`Fold into the JSON config by hand.`]};else if(_){let t=c.readFileSync(b,`utf-8`).replace(/^\uFEFF/,``),n=a(t,y);if(`error`in n)return{id:h.id,from:`oxc`,to:`toolchain`,written:[],files:[],oxfmt:u,oxlint:d,unmapped:[{source:e.basename(b),reason:n.error}],notes:[...g,`Left dbx.config.* unchanged; fold it by hand.`]};x=b,S=n.content}else{let t=c.readFileSync(b,`utf-8`).replace(/^\uFEFF/,``);for(let n of v){let r=i(t,n.key,n.objectText);if(`error`in r)return{id:h.id,from:`oxc`,to:`toolchain`,written:[],files:[],oxfmt:u,oxlint:d,unmapped:[{source:e.basename(b),reason:r.error}],notes:[...g,`Left dbx.config.* unchanged; fold it by hand.`]};t=r.content}x=b,S=t}let C={path:x,content:S};t.write&&c.writeFileSync(x,S,`utf-8`);let w=[l.fmt,l.lint].filter(e=>!!e),T=t.ignoreManagedFiles?[]:w;if(t.ignoreManagedFiles)g.push(`Kept the source Oxc files (ignoreManagedFiles).`);else{if(t.write)for(let e of T)c.rmSync(e,{force:!0});T.length>0&&g.push(`${t.write?`Removed`:`Would remove`} the source Oxc files; \`dbx sync\` regenerates them.`)}return{id:h.id,from:`oxc`,to:`toolchain`,written:[x],removed:T,files:[C],oxfmt:u,oxlint:d,notes:[...g,_?"Folded into `toolchain.vite.fmt` / `toolchain.vite.lint`.":"Folded into `toolchain.fmt.oxc` / `toolchain.lint.oxc`."]}}};export{l as OXC_FMT_FILE,u as OXC_LINT_FILE,f as findOxcConfigs,h as oxcToToolchain};
|
|
@@ -7,7 +7,40 @@ type Json = Record<string, any>;
|
|
|
7
7
|
* Biome rule path -> Oxlint rule name. `null` means "no known equivalent".
|
|
8
8
|
* Bare names are core ESLint rules; prefixed names use an Oxlint plugin.
|
|
9
9
|
*/
|
|
10
|
-
export declare const RULE_MAP:
|
|
10
|
+
export declare const RULE_MAP: {
|
|
11
|
+
readonly 'a11y.useAltText': 'jsx-a11y/alt-text';
|
|
12
|
+
readonly 'a11y.useButtonType': 'react/button-has-type';
|
|
13
|
+
readonly 'a11y.useKeyWithClickEvents': 'jsx-a11y/click-events-have-key-events';
|
|
14
|
+
readonly 'a11y.noSvgWithoutTitle': null;
|
|
15
|
+
readonly 'a11y.useAriaPropsForRole': null;
|
|
16
|
+
readonly 'a11y.useFocusableInteractive': null;
|
|
17
|
+
readonly 'a11y.useSemanticElements': 'jsx-a11y/prefer-tag-over-role';
|
|
18
|
+
readonly 'a11y.noStaticElementInteractions': null;
|
|
19
|
+
readonly 'a11y.noLabelWithoutControl': 'jsx-a11y/label-has-associated-control';
|
|
20
|
+
readonly 'complexity.noBannedTypes': 'typescript/no-empty-object-type';
|
|
21
|
+
readonly 'complexity.noUselessEmptyExport': 'typescript/no-useless-empty-export';
|
|
22
|
+
readonly 'complexity.noUselessEscapeInRegex': 'no-useless-escape';
|
|
23
|
+
readonly 'complexity.noImportantStyles': null;
|
|
24
|
+
readonly 'complexity.noStaticOnlyClass': 'unicorn/no-static-only-class';
|
|
25
|
+
readonly 'correctness.noConstantCondition': 'no-constant-condition';
|
|
26
|
+
readonly 'correctness.noInnerDeclarations': 'no-inner-declarations';
|
|
27
|
+
readonly 'correctness.noUnusedVariables': 'no-unused-vars';
|
|
28
|
+
readonly 'correctness.noUnusedFunctionParameters': 'no-unused-vars';
|
|
29
|
+
readonly 'correctness.noUnusedImports': 'no-unused-vars';
|
|
30
|
+
readonly 'correctness.noSwitchDeclarations': 'no-case-declarations';
|
|
31
|
+
readonly 'correctness.useExhaustiveDependencies': 'react-hooks/exhaustive-deps';
|
|
32
|
+
readonly 'style.useExponentiationOperator': 'prefer-exponentiation-operator';
|
|
33
|
+
readonly 'style.noNonNullAssertion': 'typescript/no-non-null-assertion';
|
|
34
|
+
readonly 'style.useNodejsImportProtocol': 'unicorn/prefer-node-protocol';
|
|
35
|
+
readonly 'style.useTemplate': 'prefer-template';
|
|
36
|
+
readonly 'suspicious.noDoubleEquals': 'eqeqeq';
|
|
37
|
+
readonly 'suspicious.noExplicitAny': 'typescript/no-explicit-any';
|
|
38
|
+
readonly 'suspicious.noAssignInExpressions': 'no-return-assign';
|
|
39
|
+
readonly 'suspicious.noUselessEscapeInString': 'no-useless-escape';
|
|
40
|
+
readonly 'suspicious.noImplicitAnyLet': null;
|
|
41
|
+
readonly 'suspicious.noUnknownAtRules': null;
|
|
42
|
+
readonly 'performance.noAccumulatingSpread': 'oxc/no-accumulating-spread';
|
|
43
|
+
};
|
|
11
44
|
export interface OxlintMapping {
|
|
12
45
|
oxlint: Json;
|
|
13
46
|
unmapped: UnmappedItem[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:path";import"node:url";import.meta.url;const e={"a11y.useAltText":`jsx-a11y/alt-text`,"a11y.useButtonType":`react/button-has-type`,"a11y.useKeyWithClickEvents":`jsx-a11y/click-events-have-key-events`,"a11y.noSvgWithoutTitle":null,"a11y.useAriaPropsForRole":null,"a11y.useFocusableInteractive":null,"a11y.useSemanticElements":`jsx-a11y/prefer-tag-over-role`,"a11y.noStaticElementInteractions":null,"a11y.noLabelWithoutControl":`jsx-a11y/label-has-associated-control`,"complexity.noBannedTypes":`typescript/no-empty-object-type`,"complexity.noUselessEmptyExport":`typescript/no-useless-empty-export`,"complexity.noUselessEscapeInRegex":`no-useless-escape`,"complexity.noImportantStyles":null,"complexity.noStaticOnlyClass":`unicorn/no-static-only-class`,"correctness.noConstantCondition":`no-constant-condition`,"correctness.noInnerDeclarations":`no-inner-declarations`,"correctness.noUnusedVariables":`no-unused-vars`,"correctness.noUnusedFunctionParameters":`no-unused-vars`,"correctness.noUnusedImports":`no-unused-vars`,"correctness.noSwitchDeclarations":`no-case-declarations`,"correctness.useExhaustiveDependencies":`react-hooks/exhaustive-deps`,"style.useExponentiationOperator":`prefer-exponentiation-operator`,"style.noNonNullAssertion":`typescript/no-non-null-assertion`,"style.useNodejsImportProtocol":`unicorn/prefer-node-protocol`,"style.useTemplate":`prefer-template`,"suspicious.noDoubleEquals":`eqeqeq`,"suspicious.noExplicitAny":`typescript/no-explicit-any`,"suspicious.noAssignInExpressions":`no-return-assign`,"suspicious.noUselessEscapeInString":`no-useless-escape`,"suspicious.noImplicitAnyLet":null,"suspicious.noUnknownAtRules":null,"performance.noAccumulatingSpread":`oxc/no-accumulating-spread`};function t(e){if(typeof e==`string`)return e;if(e&&typeof e==`object`)return e.level}function
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;const e={"a11y.useAltText":`jsx-a11y/alt-text`,"a11y.useButtonType":`react/button-has-type`,"a11y.useKeyWithClickEvents":`jsx-a11y/click-events-have-key-events`,"a11y.noSvgWithoutTitle":null,"a11y.useAriaPropsForRole":null,"a11y.useFocusableInteractive":null,"a11y.useSemanticElements":`jsx-a11y/prefer-tag-over-role`,"a11y.noStaticElementInteractions":null,"a11y.noLabelWithoutControl":`jsx-a11y/label-has-associated-control`,"complexity.noBannedTypes":`typescript/no-empty-object-type`,"complexity.noUselessEmptyExport":`typescript/no-useless-empty-export`,"complexity.noUselessEscapeInRegex":`no-useless-escape`,"complexity.noImportantStyles":null,"complexity.noStaticOnlyClass":`unicorn/no-static-only-class`,"correctness.noConstantCondition":`no-constant-condition`,"correctness.noInnerDeclarations":`no-inner-declarations`,"correctness.noUnusedVariables":`no-unused-vars`,"correctness.noUnusedFunctionParameters":`no-unused-vars`,"correctness.noUnusedImports":`no-unused-vars`,"correctness.noSwitchDeclarations":`no-case-declarations`,"correctness.useExhaustiveDependencies":`react-hooks/exhaustive-deps`,"style.useExponentiationOperator":`prefer-exponentiation-operator`,"style.noNonNullAssertion":`typescript/no-non-null-assertion`,"style.useNodejsImportProtocol":`unicorn/prefer-node-protocol`,"style.useTemplate":`prefer-template`,"suspicious.noDoubleEquals":`eqeqeq`,"suspicious.noExplicitAny":`typescript/no-explicit-any`,"suspicious.noAssignInExpressions":`no-return-assign`,"suspicious.noUselessEscapeInString":`no-useless-escape`,"suspicious.noImplicitAnyLet":null,"suspicious.noUnknownAtRules":null,"performance.noAccumulatingSpread":`oxc/no-accumulating-spread`};function t(t){return Object.hasOwn(e,t)}function n(e){if(typeof e==`string`)return e;if(e&&typeof e==`object`)return e.level}function r(e){if(e===`error`)return`error`;if(e===`warn`)return`warn`;if(e===`info`||e===`off`)return`off`}function i(e){let t=[];for(let[n,r]of Object.entries(e??{}))if(r&&typeof r==`object`)for(let[e,i]of Object.entries(r))t.push([`${n}.${e}`,i]);return t}function a(a,o){let s={},c=[];for(let[o,l]of i(a.linter?.rules??{})){let i=r(n(l));if(!i)continue;let a=t(o)?e[o]:void 0;a===void 0?c.push({source:`linter.rules.${o}`,reason:`not in the Biome->Oxlint map`}):a===null?c.push({source:`linter.rules.${o}`,reason:`no Oxlint equivalent`}):s[a]=i}return{oxlint:{$schema:`./node_modules/oxlint/configuration_schema.json`,rules:s,ignorePatterns:o},unmapped:c}}export{e as RULE_MAP,a as mapBiomeToOxlint};
|
|
@@ -17,8 +17,9 @@ export interface MigrationContext {
|
|
|
17
17
|
/** The project root. */
|
|
18
18
|
cwd: string;
|
|
19
19
|
/**
|
|
20
|
-
* `files` (default) writes `.oxfmtrc.json` / `.oxlintrc.json`; `vite`
|
|
21
|
-
*
|
|
20
|
+
* `files` (default) writes `.oxfmtrc.json` / `.oxlintrc.json`; `vite` merges
|
|
21
|
+
* `fmt`/`lint` into `vite.config.ts` (or into `toolchain.vite` for the
|
|
22
|
+
* `oxc` source).
|
|
22
23
|
*/
|
|
23
24
|
target?: MigrateTarget;
|
|
24
25
|
/** Write the result (default false = dry-run). */
|
|
@@ -9,6 +9,13 @@ export declare function serializeTs(value: unknown, indent?: number): string;
|
|
|
9
9
|
export declare function matchBracket(source: string, open: number): number;
|
|
10
10
|
/** The `[valueStart, valueEnd)` range of a top-level `key:` inside an object. */
|
|
11
11
|
export declare function findTopLevelValue(source: string, open: number, close: number, key: string): [number, number] | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* The index of the object literal `fmt`/`lint` can be merged into: the argument
|
|
14
|
+
* of `defineConfig({ ... })`, or an `export default { ... }` /
|
|
15
|
+
* `module.exports = { ... }` object. Returns `undefined` for function/async
|
|
16
|
+
* configs (which cannot be safely text-spliced).
|
|
17
|
+
*/
|
|
18
|
+
export declare function findViteMergeObject(source: string): number | undefined;
|
|
12
19
|
/**
|
|
13
20
|
* Insert or replace `fmt`/`lint` inside an existing `vite.config.ts`, or render
|
|
14
21
|
* a fresh one when none exists.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import{default as e}from"node:path";import"node:url";import.meta.url;import t from"node:fs";const n=/^[A-Za-z_$][\w$]*$/;function r(e,t=0){let i=` `.repeat(t),a=` `.repeat(t+1);if(e==null)return`null`;if(typeof e==`string`)return`'${e.replace(/\\/g,`\\\\`).replace(/'/g,`\\'`)}'`;if(typeof e==`number`||typeof e==`boolean`)return String(e);if(Array.isArray(e))return e.length===0?`[]`:`[\n${e.map(e=>`${a}${r(e,t+1)}`).join(`,
|
|
2
2
|
`)},\n${i}]`;if(typeof e==`object`){let o=Object.entries(e);return o.length===0?`{}`:`{\n${o.map(([e,i])=>{let o=n.test(e)?e:JSON.stringify(e);return`${a}${o}: ${r(i,t+1)}`}).join(`,
|
|
3
3
|
`)},\n${i}}`}return JSON.stringify(e)}function i(e,t){let n=e[t],r=e[t+1];if(n===`/`&&r===`/`){for(;t<e.length&&e[t]!==`
|
|
4
|
-
`;)t++;return t}if(n===`/`&&r===`*`){for(t+=2;t<e.length&&(e[t]!==`*`||e[t+1]!==`/`);)t++;return t+2}if(n===`"`||n===`'`||n==="`"){let r=n;for(t++;t<e.length&&e[t]!==r;)e[t]===`\\`&&t++,t++;return t+1}return t}function a(e,t){let n={"{":`}`,"[":`]`}[e[t]];if(!n)return-1;let r=0;for(let a=t;a<e.length;a++){let o=i(e,a);if(o!==a)a=o-1;else if(e[a]===e[t])r++;else if(e[a]===n&&(r--,r===0))return a+1}return-1}function o(e,t,r,o){let s=1;for(let c=t+1;c<r;c++){let t=i(e,c);if(t!==c){c=t-1;continue}let l=e[c];if(l===`{`||l===`[`)s++;else if(l===`}`||l===`]`)s--;else if(s===1&&n.test(l)){let t=c;for(;t<r&&/[\w$]/.test(e[t]);)t++;let n=e.slice(c,t),i=t;for(;i<r&&/\s/.test(e[i]);)i++;if(n===o&&e[i]===`:`){let t=i+1;for(;t<r&&/\s/.test(e[t]);)t++;let n=e[t];if(n===`{`||n===`[`)return[t,a(e,t)];let o=t;for(;o<r&&e[o]!==`,`&&e[o]!==`}`;)o++;for(;o>t&&/\s/.test(e[o-1]);)o--;return[t,o]}c=t-1}}}function s(e,t){let n=Object.entries(t).filter(([,e])=>e!==void 0);if(!e)return`import { defineConfig } from 'vite-plus';\n\nexport default defineConfig({\n${n.map(([e,t])=>` ${e}: ${r(t,1)},`).join(`
|
|
5
|
-
`)}\n});\n`;let i=e
|
|
4
|
+
`;)t++;return t}if(n===`/`&&r===`*`){for(t+=2;t<e.length&&(e[t]!==`*`||e[t+1]!==`/`);)t++;return t+2}if(n===`"`||n===`'`||n==="`"){let r=n;for(t++;t<e.length&&e[t]!==r;)e[t]===`\\`&&t++,t++;return t+1}return t}function a(e,t){let n={"{":`}`,"[":`]`}[e[t]];if(!n)return-1;let r=0;for(let a=t;a<e.length;a++){let o=i(e,a);if(o!==a)a=o-1;else if(e[a]===e[t])r++;else if(e[a]===n&&(r--,r===0))return a+1}return-1}function o(e,t,r,o){let s=1;for(let c=t+1;c<r;c++){let t=i(e,c);if(t!==c){c=t-1;continue}let l=e[c];if(l===`{`||l===`[`)s++;else if(l===`}`||l===`]`)s--;else if(s===1&&n.test(l)){let t=c;for(;t<r&&/[\w$]/.test(e[t]);)t++;let n=e.slice(c,t),i=t;for(;i<r&&/\s/.test(e[i]);)i++;if(n===o&&e[i]===`:`){let t=i+1;for(;t<r&&/\s/.test(e[t]);)t++;let n=e[t];if(n===`{`||n===`[`)return[t,a(e,t)];let o=t;for(;o<r&&e[o]!==`,`&&e[o]!==`}`;)o++;for(;o>t&&/\s/.test(e[o-1]);)o--;return[t,o]}c=t-1}}}function s(e){let t=e.match(/\bdefineConfig\s*\(\s*\{/);if(t?.index!==void 0)return e.indexOf(`{`,t.index);let n=e.match(/\bexport\s+default\s*\{/)??e.match(/\bmodule\.exports\s*=\s*\{/);if(n?.index!==void 0)return e.indexOf(`{`,n.index)}function c(e,t){let n=Object.entries(t).filter(([,e])=>e!==void 0);if(!e)return`import { defineConfig } from 'vite-plus';\n\nexport default defineConfig({\n${n.map(([e,t])=>` ${e}: ${r(t,1)},`).join(`
|
|
5
|
+
`)}\n});\n`;let i=e;if(s(i)===void 0)throw Error("cannot merge into a function/async vite config; add `fmt`/`lint` manually.");for(let[e,t]of n){let n=s(i);if(n===void 0)break;let c=a(i,n);if(c===-1)break;let l=r(t,1),u=o(i,n,c,e);i=u?`${i.slice(0,u[0])}${l}${i.slice(u[1])}`:`${i.slice(0,n+1)}\n ${e}: ${l},${i.slice(n+1)}`}return i}function l(n,r){let i=e.join(n,`vite.config.ts`);return{path:i,content:c(t.existsSync(i)?t.readFileSync(i,`utf-8`).replace(/^\uFEFF/,``):void 0,r)}}function u(e,n,r){let i=l(e,n);return r&&t.writeFileSync(i.path,i.content,`utf-8`),i.path}export{o as findTopLevelValue,s as findViteMergeObject,a as matchBracket,c as mergeViteConfig,l as renderViteTarget,r as serializeTs,u as writeViteTarget};
|
|
@@ -25,6 +25,23 @@ export declare function extractViteObject(source: string): {
|
|
|
25
25
|
} | {
|
|
26
26
|
error: string;
|
|
27
27
|
};
|
|
28
|
+
/** The top-level `fmt`/`lint` keys present in an object literal. */
|
|
29
|
+
export declare function objectHasSections(objectText: string): {
|
|
30
|
+
fmt: boolean;
|
|
31
|
+
lint: boolean;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Whether an existing hand-written `vite.config.*` or an existing
|
|
35
|
+
* `dbx.config.*`'s `toolchain.vite` already defines `fmt`/`lint`.
|
|
36
|
+
*
|
|
37
|
+
* This decides where a formatter/linter migration lands: when Vite already owns
|
|
38
|
+
* `fmt`/`lint`, the migrated options belong in `toolchain.vite`; otherwise they
|
|
39
|
+
* belong in the top-level `toolchain.fmt`/`toolchain.lint`.
|
|
40
|
+
*/
|
|
41
|
+
export declare function viteConfigHasFmtLint(cwd: string): {
|
|
42
|
+
fmt: boolean;
|
|
43
|
+
lint: boolean;
|
|
44
|
+
} | undefined;
|
|
28
45
|
/**
|
|
29
46
|
* Whether `text` (an object literal, braces included) is made only of literals:
|
|
30
47
|
* objects, arrays, strings, numbers, booleans, `null`/`undefined` and bare keys.
|
|
@@ -62,13 +79,25 @@ export declare function renderFreshSectionsConfig(sections: {
|
|
|
62
79
|
key: string;
|
|
63
80
|
objectText: string;
|
|
64
81
|
}[]): string;
|
|
82
|
+
/**
|
|
83
|
+
* Render a fresh `dbx.config.ts` holding the folded Vite object, for a project
|
|
84
|
+
* that has a hand-written `vite.config.*` but no `dbx.config.*` yet. Like the
|
|
85
|
+
* scaffold, it wraps the config in `defineConfig` from `@deltabox/toolchain` (a
|
|
86
|
+
* workspace resolves it through the root's installed dependency).
|
|
87
|
+
*/
|
|
88
|
+
export declare function renderFreshViteConfig(objectText: string): string;
|
|
65
89
|
/**
|
|
66
90
|
* Ensure `fmt.ignorePatterns` contains `'/vite.config.ts'` in a folded Vite
|
|
67
91
|
* object literal, so Oxfmt does not reformat the generated root `vite.config.ts`
|
|
68
92
|
* shim (which would make `dbx sync --check` drift). Works on the object text
|
|
69
93
|
* (braces included) with the same balanced scanner used to fold it in.
|
|
94
|
+
*
|
|
95
|
+
* `create` (default true) adds a `fmt` object when the literal has none. Pass
|
|
96
|
+
* `false` when `fmt` belongs in the top-level `toolchain.fmt` instead: the
|
|
97
|
+
* default fmt ignores already cover the generated shim, and adding `vite.fmt`
|
|
98
|
+
* here would make Vite own formatting even though the original config did not.
|
|
70
99
|
*/
|
|
71
|
-
export declare function ensureViteFmtIgnore(objectText: string): string;
|
|
100
|
+
export declare function ensureViteFmtIgnore(objectText: string, create?: boolean): string;
|
|
72
101
|
/** Fold a hand-written root `vite.config.*` into `dbx.config.*`. */
|
|
73
102
|
export declare const viteToToolchain: ToolchainMigration;
|
|
74
103
|
//#endregion
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{CONFIG_FILE_NAMES as t}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{findTopLevelValue as n,matchBracket as
|
|
2
|
-
`;)t++;return t}if(n===`/`&&r===`*`){for(t+=2;t<e.length&&(e[t]!==`*`||e[t+1]!==`/`);)t++;return t+2}if(n===`"`||n===`'`){let r=n;for(t++;t<e.length&&e[t]!==r;)e[t]===`\\`&&t++,t++;return t+1}return t}function
|
|
3
|
-
`,t-1)+1;return e.slice(n).match(/^[ \t]*/)?.[0]??``}function
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{CONFIG_FILE_NAMES as t}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{findTopLevelValue as n,findViteMergeObject as r,matchBracket as i}from"./vite-target.js";import a from"node:fs";const o=[`vite.config.ts`,`vite.config.mts`,`vite.config.js`,`vite.config.mjs`];function s(t){for(let n of o){let r=e.join(t,n);if(a.existsSync(r))return r}}function c(n){for(let r of t){let t=e.join(n,r);if(a.existsSync(t))return t}}function l(e,t){let n=e[t],r=e[t+1];if(n===`/`&&r===`/`){for(;t<e.length&&e[t]!==`
|
|
2
|
+
`;)t++;return t}if(n===`/`&&r===`*`){for(t+=2;t<e.length&&(e[t]!==`*`||e[t+1]!==`/`);)t++;return t+2}if(n===`"`||n===`'`){let r=n;for(t++;t<e.length&&e[t]!==r;)e[t]===`\\`&&t++,t++;return t+1}return t}function u(e,t){let n=e.lastIndexOf(`
|
|
3
|
+
`,t-1)+1;return e.slice(n).match(/^[ \t]*/)?.[0]??``}function d(e,t){return e.split(`
|
|
4
4
|
`).map((e,n)=>n===0?e:`${t}${e}`).join(`
|
|
5
|
-
`)}function
|
|
5
|
+
`)}function f(e,t){return t?e.split(`
|
|
6
6
|
`).map((e,n)=>n>0&&e.startsWith(t)?e.slice(t.length):e).join(`
|
|
7
|
-
`):e}function
|
|
8
|
-
`)&&m?
|
|
7
|
+
`):e}function p(e,t,n){let r=[],i=1;for(let a=t+1;a<n;a++){let t=l(e,a);if(t!==a){a=t-1;continue}let o=e[a];if(o===`{`||o===`[`)i++;else if(o===`}`||o===`]`)i--;else if(i===1&&/[A-Za-z_$]/.test(o)){let t=a;for(;t<n&&/[\w$]/.test(e[t]);)t++;let i=t;for(;i<n&&/\s/.test(e[i]);)i++;i<n&&e[i]===`:`&&r.push(e.slice(a,t)),a=t-1}}return r}function m(e,t){let r=e.indexOf(`{`),a=r===-1?-1:i(e,r);if(r===-1||a===-1)return e;let o=a-1,s=e.slice(0,o),c=e.slice(o),l=s.replace(/\s+$/,``),d=u(e,o),f=p(e,r,a)[0],m=f===void 0?void 0:n(e,r,a,f),h=s.includes(`
|
|
8
|
+
`)&&m?u(e,m[0]):`${d} `;return`${l}${l.endsWith(`{`)||l.endsWith(`,`)?``:`,`}${t.map(({key:e,value:t})=>`\n${h}${e}: ${t},`).join(``)}\n${d}${c}`}function h(e,t){let r=e.indexOf(`{`),a=t.indexOf(`{`),o=r===-1?-1:i(e,r),s=a===-1?-1:i(t,a);if(r===-1||o===-1||a===-1||s===-1)return t;let c=[],l=[];for(let i of p(t,a,s)){let u=n(t,a,s,i);if(!u)continue;let d=t.slice(u[0],u[1]),f=n(e,r,o,i);if(f){let t=e.slice(f[0],f[1]),n=t.trimStart().startsWith(`{`)&&d.trimStart().startsWith(`{`)?h(t,d):d;c.push({start:f[0],end:f[1],text:n})}else l.push({key:i,value:d})}let u=e;for(let e of c.sort((e,t)=>t.start-e.start))u=`${u.slice(0,e.start)}${e.text}${u.slice(e.end)}`;return l.length>0?m(u,l):u}function g(e){let t=e.indexOf(`{`),r=t===-1?-1:i(e,t);if(t===-1||r===-1)return e;let a=n(e,t,r,`config`);return!a||e.slice(a[0],a[1]).trim()!==`false`?e:`${e.slice(0,a[0])}true${e.slice(a[1])}`}function _(e){let t=e.match(/\bdefineConfig\s*\(/),n=0;if(t&&t.index!==void 0)n=t.index+t[0].length;else{let t=e.match(/export\s+default\s*/)??e.match(/\bmodule\.exports\s*=\s*/);if(!t||t.index===void 0)return;n=t.index+t[0].length}let r=n;for(;r<e.length&&e[r]!==`{`;)r++;if(r>=e.length)return;let a=i(e,r);return a===-1?void 0:[r,a]}function v(e){let t=e.match(/\bdefineConfig\s*\(/),n=-1;if(t&&t.index!==void 0)n=t.index+t[0].length;else{let t=e.match(/export\s+default\s*/)??e.match(/\bmodule\.exports\s*=\s*/);t&&t.index!==void 0&&(n=t.index+t[0].length)}if(n===-1)return{error:"no `defineConfig(...)` call or default-exported object found"};for(;n<e.length&&/\s/.test(e[n]);)n++;if(e[n]!==`{`)return{error:`the config value is not an object literal (it is a variable or an expression)`};let r=i(e,n);return r===-1?{error:`unbalanced braces in the config object`}:{text:e.slice(n,r)}}function y(e){let t=e.indexOf(`{`);if(t===-1)return{fmt:!1,lint:!1};let r=i(e,t);return r===-1?{fmt:!1,lint:!1}:{fmt:!!n(e,t,r,`fmt`),lint:!!n(e,t,r,`lint`)}}function b(e){let t=_(e);if(!t)return;let r=n(e,t[0],t[1],`toolchain`);if(!r)return;let i=n(e,r[0],r[1],`vite`);if(!i)return;let a=e.slice(i[0],i[1]);return a.trimStart().startsWith(`{`)?a:void 0}function x(e){let t,n=s(e);if(n)try{let e=a.readFileSync(n,`utf-8`).replace(/^\uFEFF/,``);if(!D(e)&&r(e)!==void 0){let n=v(e);`error`in n||(t=y(n.text))}}catch{}let i,o=c(e);if(o&&!o.endsWith(`.json`))try{let e=b(a.readFileSync(o,`utf-8`).replace(/^\uFEFF/,``));e&&(i=y(e))}catch{}return t&&i?{fmt:t.fmt||i.fmt,lint:t.lint||i.lint}:t??i}function S(e){let t=0;for(;t<e.length;){let n=e[t];if(n==="`")return{ok:!1,reason:`template literal`};let r=l(e,t);if(r!==t)t=r;else{if(n===`.`&&e[t+1]===`.`&&e[t+2]===`.`)return{ok:!1,reason:"spread (`...`)"};if(/[A-Za-z_$]/.test(n)){let n=t;for(;n<e.length&&/[\w$]/.test(e[n]);)n++;let r=e.slice(t,n),i=n;for(;i<e.length&&/\s/.test(e[i]);)i++;if(e[i]!==`:`&&![`true`,`false`,`null`,`undefined`].includes(r))return{ok:!1,reason:`non-literal value \`${r}\``};t=n}else t++}}return{ok:!0}}function C(e,t){let r=_(e);if(!r)return{error:`could not locate the config root object`};let[i,a]=r,o=n(e,i,a,`toolchain`);if(!o)return{error:"the config has no `toolchain` object to add `vite` to"};let[s,c]=o,l=n(e,s,c,`vite`);if(l){let[n,r]=l,i=u(e,n),a=f(e.slice(n,r),i),o=d(g(a.trimStart().startsWith(`{`)&&t.trimStart().startsWith(`{`)?h(a,t):t),i);return{content:`${e.slice(0,n)}${o}${e.slice(r)}`}}let p=`${u(e,s)} `,m=d(t,p);return{content:`${e.slice(0,s+1)}\n${p}vite: ${m},${e.slice(s+1)}`}}function w(e,t,r){let i=_(e);if(!i)return{error:`could not locate the config root object`};let[a,o]=i,s=n(e,a,o,`toolchain`);if(!s)return{error:`the config has no \`toolchain\` object to add \`${t}\` to`};let[c,l]=s,p=n(e,c,l,t);if(p){let[t,n]=p,i=u(e,t),a=f(e.slice(t,n),i),o=a.trimStart().startsWith(`{`)&&r.trimStart().startsWith(`{`)?h(a,r):r;return{content:`${e.slice(0,t)}${d(o,i)}${e.slice(n)}`}}let m=`${u(e,c)} `;return{content:`${e.slice(0,c+1)}\n${m}${t}: ${d(r,m)},${e.slice(c+1)}`}}function T(e){return[`import { defineConfig } from '@deltabox/toolchain';`,``,`export default defineConfig({`,` toolchain: {`,e.map(({key:e,objectText:t})=>` ${e}: ${d(t,` `)},`).join(`
|
|
9
9
|
`),` },`,`});`,``].join(`
|
|
10
|
-
`)}const
|
|
11
|
-
`)}function
|
|
10
|
+
`)}const E=`/vite.config.ts`;function D(e){return/resolveVite\s*(?:<[^>]*>)?\s*\(/.test(e)&&e.includes(`@deltabox/toolchain/vite`)}function O(e){return[`import { defineConfig } from '@deltabox/toolchain';`,``,`export default defineConfig({`,` toolchain: {`,` vite: ${d(e,` `)},`,` },`,`});`,``].join(`
|
|
11
|
+
`)}function k(e,t=!0){let r=e.indexOf(`{`);if(r===-1)return e;let a=i(e,r);if(a===-1)return e;let o=`'${E}'`,s=n(e,r,a,`fmt`);if(s&&e[s[0]]===`{`&&e[s[1]-1]===`}`){let[t,r]=s,i=n(e,t,r,`ignorePatterns`);if(i){let[t,n]=i;if(e.slice(t,n).includes(E))return e;if(e[t]===`[`){let n=e.slice(t+1),r=n.startsWith(`
|
|
12
|
+
`)||n.startsWith(`\r
|
|
13
|
+
`)?`,`:`, `;return`${e.slice(0,t+1)}${o}${r}${n}`}return`${e.slice(0,t)}[${o}]${e.slice(n)}`}return`${e.slice(0,t+1)} ignorePatterns: [${o}],${e.slice(t+1)}`}return s?`${e.slice(0,s[0])}{ ignorePatterns: [${o}] }${e.slice(s[1])}`:t?`${e.slice(0,r+1)} fmt: { ignorePatterns: [${o}] },${e.slice(r+1)}`:e}const A={id:`vite-to-toolchain`,from:`vite`,to:`toolchain`,description:"Fold a hand-written vite.config.* into dbx.config.* (`toolchain.vite`).",detect:e=>{let t=s(e);if(!t)return!1;try{return!D(a.readFileSync(t,`utf-8`))}catch{return!0}},run:async t=>{let n=s(t.cwd);if(!n)throw Error(`vite-to-toolchain: no vite.config.* found.`);let r=a.readFileSync(n,`utf-8`).replace(/^\uFEFF/,``),i=[`Source: ${e.basename(n)}.`],o=[],l=()=>({id:A.id,from:`vite`,to:`toolchain`,written:[],files:[],unmapped:o,notes:i});if(D(r))return i.push("Already managed by `dbx sync`; nothing to fold."),l();let u=v(r);if(`error`in u)return o.push({source:e.basename(n),reason:u.error}),i.push(`Left vite.config.* unchanged; fold it by hand.`),l();let d=S(u.text);if(!d.ok)return o.push({source:e.basename(n),reason:`cannot fold faithfully (${d.reason})`}),i.push(`The config references helpers/imports or non-literal expressions; fold it by hand.`),l();let f=y(u.text),p=k(u.text,f.fmt),m=f.fmt?`added \`${E}\` to \`fmt.ignorePatterns\`; run \`dbx sync\` to regenerate vite.config.ts.`:"left `fmt` out of `toolchain.vite` (the default fmt ignores cover the generated `vite.config.ts`); run `dbx sync` to regenerate it.",h=c(t.cwd),g=()=>t.ignoreViteConfigFile?(i.push(`Kept \`${e.basename(n)}\` (ignoreViteConfigFile).`),[]):(t.write&&a.rmSync(n,{force:!0}),i.push(`Removed \`${e.basename(n)}\` (recreated by \`dbx sync\`).`),[n]);if(h&&h.endsWith(`.json`))return o.push({source:e.basename(h),reason:`JSON configs cannot hold the extracted object by text-splice`}),i.push(`Fold into the JSON config by hand.`),l();if(!h){let n=e.join(t.cwd,`dbx.config.ts`),r={path:n,content:O(p)};t.write&&a.writeFileSync(n,r.content,`utf-8`);let o=g();return i.push(`Created \`${e.basename(n)}\` with the folded \`toolchain.vite\`; ${m}`),{id:A.id,from:`vite`,to:`toolchain`,written:[n],removed:o,files:[r],notes:i}}let _=C(a.readFileSync(h,`utf-8`).replace(/^\uFEFF/,``),p);if(`error`in _)return o.push({source:e.basename(h),reason:_.error}),i.push("Left dbx.config.* unchanged; fold `toolchain.vite` in by hand."),l();let b={path:h,content:_.content};t.write&&a.writeFileSync(h,b.content,`utf-8`);let x=g();return i.push(`Folded into \`toolchain.vite\` (${e.basename(h)}); ${m}`),{id:A.id,from:`vite`,to:`toolchain`,written:[h],removed:x,files:[b],notes:i}}};export{o as VITE_CONFIG_FILES,k as ensureViteFmtIgnore,v as extractViteObject,c as findDbxConfig,s as findViteConfig,w as foldToolchainSection,C as foldViteIntoConfig,h as mergeViteObjects,y as objectHasSections,T as renderFreshSectionsConfig,O as renderFreshViteConfig,S as scanLiteralObject,x as viteConfigHasFmtLint,A as viteToToolchain};
|