@deltabox/toolchain 1.3.1 → 1.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 +117 -4
- package/README.md +32 -39
- package/dist/changelog.d.ts +3 -2
- package/dist/changelog.js +1 -1
- package/dist/cli/commands/providers.js +1 -1
- package/dist/cli/commands/sync.js +1 -1
- package/dist/cli/context.js +1 -1
- package/dist/cli/index.d.ts +4 -4
- package/dist/cli/index.js +1 -1
- package/dist/cli/register.d.ts +3 -3
- package/dist/cli/register.js +1 -1
- package/dist/config.d.ts +2 -2
- package/dist/config.js +1 -1
- package/dist/core.d.ts +4 -3
- package/dist/core.js +1 -1
- package/dist/index.d.ts +11 -9
- package/dist/index.js +1 -1
- package/dist/migrate.d.ts +3 -2
- package/dist/migrate.js +1 -1
- package/dist/package.js +1 -1
- package/dist/packages/changelog/src/cli/index.d.ts +2 -2
- package/dist/packages/changelog/src/cli/index.js +1 -1
- package/dist/packages/changelog/src/index.d.ts +4 -3
- package/dist/packages/changelog/src/index.js +1 -1
- package/dist/packages/changelog/src/run-workflows.d.ts +2 -2
- package/dist/packages/changelog/src/run.d.ts +8 -2
- package/dist/packages/changelog/src/run.js +1 -1
- package/dist/packages/changelog/src/sync.d.ts +13 -5
- package/dist/packages/changelog/src/sync.js +1 -1
- package/dist/packages/changelog/src/utils/versioning.d.ts +78 -0
- package/dist/packages/changelog/src/utils/versioning.js +1 -0
- package/dist/packages/changelog/src/utils/write.js +1 -1
- package/dist/packages/changelog/src/workflows.js +1 -1
- package/dist/packages/config/src/cli/index.d.ts +2 -2
- package/dist/packages/config/src/generators/index.d.ts +2 -2
- package/dist/packages/config/src/generators/index.js +1 -1
- package/dist/packages/config/src/generators/types.d.ts +16 -0
- package/dist/packages/config/src/generators/types.js +2 -1
- package/dist/packages/config/src/index.d.ts +3 -3
- package/dist/packages/config/src/index.js +1 -1
- package/dist/packages/config/src/schema.d.ts +1 -1
- package/dist/packages/config/src/schema.js +1 -1
- 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.d.ts +3 -3
- package/dist/packages/core/src/loader.js +1 -1
- package/dist/packages/core/src/project-type.d.ts +2 -2
- package/dist/packages/core/src/provider-registry.d.ts +12 -0
- package/dist/packages/core/src/provider-registry.js +1 -0
- package/dist/packages/core/src/reset.d.ts +3 -3
- package/dist/packages/core/src/reset.js +1 -1
- package/dist/packages/core/src/sync.d.ts +2 -2
- package/dist/packages/core/src/vscode.d.ts +3 -3
- package/dist/packages/migrate/src/biome.d.ts +3 -3
- package/dist/packages/migrate/src/biome.js +1 -1
- package/dist/packages/migrate/src/cli/index.d.ts +5 -4
- package/dist/packages/migrate/src/cli/index.js +1 -1
- package/dist/packages/migrate/src/dprint.d.ts +2 -2
- package/dist/packages/migrate/src/dprint.js +1 -1
- package/dist/packages/migrate/src/eslint.d.ts +2 -2
- package/dist/packages/migrate/src/eslint.js +1 -1
- package/dist/packages/migrate/src/index.d.ts +3 -2
- package/dist/packages/migrate/src/index.js +1 -1
- package/dist/packages/migrate/src/prettier.d.ts +2 -2
- package/dist/packages/migrate/src/prettier.js +1 -1
- package/dist/packages/migrate/src/registry.d.ts +4 -4
- package/dist/packages/migrate/src/registry.js +1 -1
- package/dist/packages/migrate/src/types.d.ts +4 -4
- package/dist/packages/migrate/src/vite.d.ts +52 -0
- package/dist/packages/migrate/src/vite.js +5 -0
- package/dist/packages/project/src/cli/index.d.ts +2 -2
- 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/typescript.d.ts +1 -1
- package/dist/packages/project/src/typescript.js +1 -1
- package/dist/packages/shared/src/bin.d.ts +32 -0
- package/dist/packages/shared/src/bin.js +1 -0
- package/dist/packages/shared/src/config-schema.d.ts +131 -57
- package/dist/packages/shared/src/config-schema.js +1 -1
- package/dist/packages/shared/src/config-types.d.ts +42 -39
- package/dist/packages/shared/src/index.d.ts +9 -8
- package/dist/packages/shared/src/index.js +1 -1
- package/dist/packages/shared/src/logger.d.ts +7 -4
- package/dist/packages/shared/src/logger.js +1 -1
- package/dist/packages/shared/src/provider.d.ts +6 -6
- package/dist/packages/shared/src/run.d.ts +22 -2
- package/dist/packages/shared/src/run.js +1 -1
- package/dist/packages/shared/src/toolchain.d.ts +17 -19
- package/dist/packages/shared/src/toolchain.js +1 -1
- package/dist/packages/shared/src/types.d.ts +9 -9
- package/dist/packages/template/src/cli/index.d.ts +2 -2
- package/dist/packages/template/src/cli/index.js +1 -1
- package/dist/packages/template/src/online.d.ts +3 -3
- package/dist/packages/template/src/registry.d.ts +8 -8
- package/dist/packages/template/src/types.d.ts +3 -3
- package/dist/packages/tsconfig/src/cli/index.d.ts +2 -2
- package/dist/packages/tsdown/src/cli/index.d.ts +2 -2
- package/dist/packages/vite/src/cli/index.d.ts +2 -2
- package/dist/packages/vite/src/index.d.ts +4 -3
- package/dist/packages/vite/src/index.js +1 -1
- package/dist/packages/vite/src/plugin.d.ts +32 -19
- package/dist/packages/vite/src/plugin.js +1 -1
- package/dist/packages/vite/src/provider.d.ts +2 -2
- package/dist/packages/vite/src/resolve.d.ts +19 -0
- package/dist/packages/vite/src/resolve.js +1 -0
- package/dist/packages/vite/src/sync.d.ts +10 -14
- package/dist/packages/vite/src/sync.js +2 -2
- package/dist/packages/vite/src/vp.d.ts +5 -0
- package/dist/packages/vite/src/vp.js +1 -1
- package/dist/project.d.ts +2 -2
- package/dist/project.js +1 -1
- package/dist/providers.d.ts +8 -4
- package/dist/providers.js +1 -1
- package/dist/shared.d.ts +8 -7
- package/dist/shared.js +1 -1
- package/dist/vite.d.ts +4 -3
- package/dist/vite.js +1 -1
- package/package.json +25 -16
|
@@ -2,16 +2,17 @@ import __tsdown_shims_path from 'node:path';
|
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
3
|
import { DBX_GITIGNORE_BLOCK, ensureDbxGitignore } from "./gitignore.js";
|
|
4
4
|
import { BuildProjectGraphOptions, IGNORED_DIRS, PackageManager, ProjectGraph, ProjectNode, buildProjectGraph, detectPackageManager, orderProjects, projectGraphPath, readProjectGraph, writeProjectGraph } from "./graph.js";
|
|
5
|
-
import { LoadedConfig, findConfigFile,
|
|
5
|
+
import { LoadedConfig, findConfigFile, loadToolchainConfig } from "./loader.js";
|
|
6
6
|
import { MANIFEST_DIR, MANIFEST_FILE, Manifest, readManifest, writeManifest } from "./manifest.js";
|
|
7
7
|
import { detectProjectType, resolveProjectType } from "./project-type.js";
|
|
8
|
+
import { providerRegistryPath, readProviderRegistry, writeProviderRegistry } from "./provider-registry.js";
|
|
8
9
|
import { SelectProjectsOptions, SelectedProject, selectProjects } from "./select.js";
|
|
9
|
-
import { ResetProjectsOptions, ResetProjectsResult, ResetSelectors,
|
|
10
|
+
import { ResetProjectsOptions, ResetProjectsResult, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, resetProjects, resetToolchain } from "./reset.js";
|
|
10
11
|
import { RunSyncOptions, SyncResult, runSync } from "./sync.js";
|
|
11
12
|
import { VscodeSyncOptions, vscodeSyncTask } from "./vscode.js";
|
|
12
13
|
import { RunWatchOptions, runWatch } from "./watch.js";
|
|
13
14
|
declare namespace index_d_exports {
|
|
14
|
-
export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, IGNORED_DIRS, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ResetProjectsOptions, ResetProjectsResult, ResetSelectors,
|
|
15
|
+
export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, IGNORED_DIRS, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ResetProjectsOptions, ResetProjectsResult, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, VscodeSyncOptions, buildProjectGraph, detectPackageManager, detectProjectType, ensureDbxGitignore, findConfigFile, loadToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, readManifest, readProjectGraph, readProviderRegistry, resetProjects, resetToolchain, resolveProjectType, runSync, runWatch, selectProjects, vscodeSyncTask, writeManifest, writeProjectGraph, writeProviderRegistry };
|
|
15
16
|
}
|
|
16
17
|
//#endregion
|
|
17
|
-
export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, IGNORED_DIRS, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ResetProjectsOptions, ResetProjectsResult, ResetSelectors,
|
|
18
|
+
export { BuildProjectGraphOptions, DBX_GITIGNORE_BLOCK, IGNORED_DIRS, LoadedConfig, MANIFEST_DIR, MANIFEST_FILE, Manifest, PackageManager, ProjectGraph, ProjectNode, ResetProjectsOptions, ResetProjectsResult, ResetSelectors, ResetToolchainOptions, ResetToolchainResult, RunSyncOptions, RunWatchOptions, SelectProjectsOptions, SelectedProject, SyncResult, VscodeSyncOptions, buildProjectGraph, detectPackageManager, detectProjectType, ensureDbxGitignore, findConfigFile, index_d_exports, loadToolchainConfig, orderProjects, projectGraphPath, providerRegistryPath, readManifest, readProjectGraph, readProviderRegistry, resetProjects, resetToolchain, resolveProjectType, runSync, runWatch, selectProjects, vscodeSyncTask, 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{DBX_GITIGNORE_BLOCK as t,ensureDbxGitignore as n}from"./gitignore.js";import{detectProjectType as r,resolveProjectType as i}from"./project-type.js";import{findConfigFile as a,
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{DBX_GITIGNORE_BLOCK as t,ensureDbxGitignore as n}from"./gitignore.js";import{detectProjectType as r,resolveProjectType as i}from"./project-type.js";import{findConfigFile as a,loadToolchainConfig as o}from"./loader.js";import{IGNORED_DIRS as s,buildProjectGraph as c,detectPackageManager as l,orderProjects as u,projectGraphPath as d,readProjectGraph as f,writeProjectGraph as p}from"./graph.js";import{MANIFEST_DIR as m,MANIFEST_FILE as h,readManifest as g,writeManifest as _}from"./manifest.js";import{providerRegistryPath as v,readProviderRegistry as y,writeProviderRegistry as b}from"./provider-registry.js";import{selectProjects as x}from"./select.js";import{resetProjects as S,resetToolchain as C}from"./reset.js";import{runSync as w}from"./sync.js";import{vscodeSyncTask as T}from"./vscode.js";import{runWatch as E}from"./watch.js";var D=/* @__PURE__ */ e({DBX_GITIGNORE_BLOCK:()=>t,IGNORED_DIRS:()=>s,MANIFEST_DIR:()=>m,MANIFEST_FILE:()=>h,buildProjectGraph:()=>c,detectPackageManager:()=>l,detectProjectType:()=>r,ensureDbxGitignore:()=>n,findConfigFile:()=>a,loadToolchainConfig:()=>o,orderProjects:()=>u,projectGraphPath:()=>d,providerRegistryPath:()=>v,readManifest:()=>g,readProjectGraph:()=>f,readProviderRegistry:()=>y,resetProjects:()=>S,resetToolchain:()=>C,resolveProjectType:()=>i,runSync:()=>w,runWatch:()=>E,selectProjects:()=>x,vscodeSyncTask:()=>T,writeManifest:()=>_,writeProjectGraph:()=>p,writeProviderRegistry:()=>b});export{t as DBX_GITIGNORE_BLOCK,s as IGNORED_DIRS,m as MANIFEST_DIR,h as MANIFEST_FILE,c as buildProjectGraph,l as detectPackageManager,r as detectProjectType,n as ensureDbxGitignore,a as findConfigFile,o as loadToolchainConfig,u as orderProjects,d as projectGraphPath,v as providerRegistryPath,g as readManifest,f as readProjectGraph,y as readProviderRegistry,S as resetProjects,C as resetToolchain,i as resolveProjectType,w as runSync,E as runWatch,x as selectProjects,D as src_exports,T as vscodeSyncTask,_ as writeManifest,p as writeProjectGraph,b as writeProviderRegistry};
|
|
@@ -2,12 +2,12 @@ import __tsdown_shims_path from 'node:path';
|
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
3
|
import { Replacements } from "../../shared/src/template.js";
|
|
4
4
|
import { ProjectType } from "../../shared/src/config-types.js";
|
|
5
|
-
import {
|
|
5
|
+
import { ToolchainConfig } from "../../shared/src/toolchain.js";
|
|
6
6
|
import "../../shared/src/index.js";
|
|
7
7
|
//#region packages/core/src/loader.d.ts
|
|
8
8
|
/** A loaded tooling config plus its resolved path + replacement tokens. */
|
|
9
9
|
export interface LoadedConfig {
|
|
10
|
-
config:
|
|
10
|
+
config: ToolchainConfig;
|
|
11
11
|
/** The config file that was loaded (undefined when none was found). */
|
|
12
12
|
path?: string;
|
|
13
13
|
tokens: Replacements;
|
|
@@ -23,5 +23,5 @@ export declare function findConfigFile(cwd?: string): string | undefined;
|
|
|
23
23
|
* `toolchain` key) exists an empty config is returned (so every task falls back
|
|
24
24
|
* to its defaults).
|
|
25
25
|
*/
|
|
26
|
-
export declare function
|
|
26
|
+
export declare function loadToolchainConfig(cwd?: string): Promise<LoadedConfig>;
|
|
27
27
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import{pathToFileURL as t}from"node:url";import.meta.url;import{CONFIG_FILE_NAMES as n,resolveTokens as r}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{resolveProjectType as i}from"./project-type.js";import a from"node:fs";function o(t=process.cwd()){for(let r of n){let n=e.resolve(t,r);if(a.existsSync(n))return n}}async function s(e){if(e.endsWith(`.json`))return JSON.parse(a.readFileSync(e,`utf-8`).replace(/^\uFEFF/,``));let n=t(e).href;try{let e=await import(n);return e.default??e}catch(e){try{let{tsImport:e}=await import(`/home/runner/work/toolchain/toolchain/node_modules/tsx/dist/esm/api/index.mjs`),t=await e(n,import.meta.url);return t.default??t}catch{throw e}}}async function c(e=process.cwd()){let t=o(e),n={};if(t){let e=await s(t),r=e&&typeof e==`object`?e.toolchain:void 0;r&&typeof r==`object`&&(n=r)}let a=r(n);return await n.hooks?.afterLoad?.({cwd:e,config:n,tokens:a,...t?{path:t}:{}}),{config:n,...t?{path:t}:{},tokens:a,projectType:i(e,n)}}export{o as findConfigFile,c as
|
|
1
|
+
import{default as e}from"node:path";import{pathToFileURL as t}from"node:url";import.meta.url;import{CONFIG_FILE_NAMES as n,resolveTokens as r}from"../../shared/src/toolchain.js";import"../../shared/src/index.js";import{resolveProjectType as i}from"./project-type.js";import a from"node:fs";function o(t=process.cwd()){for(let r of n){let n=e.resolve(t,r);if(a.existsSync(n))return n}}async function s(e){if(e.endsWith(`.json`))return JSON.parse(a.readFileSync(e,`utf-8`).replace(/^\uFEFF/,``));let n=t(e).href;try{let e=await import(n);return e.default??e}catch(e){try{let{tsImport:e}=await import(`/home/runner/work/toolchain/toolchain/node_modules/tsx/dist/esm/api/index.mjs`),t=await e(n,import.meta.url);return t.default??t}catch{throw e}}}async function c(e=process.cwd()){let t=o(e),n={};if(t){let e=await s(t),r=e&&typeof e==`object`?e.toolchain:void 0;r&&typeof r==`object`&&(n=r)}let a=r(n);return await n.hooks?.afterLoad?.({cwd:e,config:n,tokens:a,...t?{path:t}:{}}),{config:n,...t?{path:t}:{},tokens:a,projectType:i(e,n)}}export{o as findConfigFile,c as loadToolchainConfig};
|
|
@@ -1,14 +1,14 @@
|
|
|
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 {
|
|
4
|
+
import { ToolchainConfig } from "../../shared/src/toolchain.js";
|
|
5
5
|
import "../../shared/src/index.js";
|
|
6
6
|
//#region packages/core/src/project-type.d.ts
|
|
7
7
|
/**
|
|
8
8
|
* Resolve the project kind: an explicit `project.type` in the config wins,
|
|
9
9
|
* otherwise it is detected from the filesystem.
|
|
10
10
|
*/
|
|
11
|
-
export declare function resolveProjectType(cwd: string, config?:
|
|
11
|
+
export declare function resolveProjectType(cwd: string, config?: ToolchainConfig): ProjectType;
|
|
12
12
|
/** Detect the project kind from `cwd` (workspaces / monorepo file heuristics). */
|
|
13
13
|
export declare function detectProjectType(cwd: string): ProjectType;
|
|
14
14
|
//#endregion
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { ToolchainProvider } from "../../shared/src/provider.js";
|
|
4
|
+
import "../../shared/src/index.js";
|
|
5
|
+
//#region packages/core/src/provider-registry.d.ts
|
|
6
|
+
/** The absolute path of a project's provider registry file. */
|
|
7
|
+
export declare function providerRegistryPath(cwd?: string): string;
|
|
8
|
+
/** Read a project's custom providers (empty when the registry is absent/invalid). */
|
|
9
|
+
export declare function readProviderRegistry(cwd?: string): ToolchainProvider[];
|
|
10
|
+
/** Write a project's custom providers (removing the file when the list is empty). */
|
|
11
|
+
export declare function writeProviderRegistry(cwd: string, providers: ToolchainProvider[]): void;
|
|
12
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import t from"node:fs";const n=e.join(`.dbx`,`toolchain`);function r(t=process.cwd()){return e.join(t,n,`providers.json`)}function i(e=process.cwd()){try{let n=JSON.parse(t.readFileSync(r(e),`utf-8`));return Array.isArray(n)?n:[]}catch{return[]}}function a(n,i){let a=r(n);i.length===0?t.rmSync(a,{force:!0}):(t.mkdirSync(e.dirname(a),{recursive:!0}),t.writeFileSync(a,`${JSON.stringify(i,null,4)}\n`,`utf-8`))}export{r as providerRegistryPath,i as readProviderRegistry,a as writeProviderRegistry};
|
|
@@ -11,13 +11,13 @@ export interface ResetSelectors {
|
|
|
11
11
|
/** Remove the `dbx.config.*` file(s). */
|
|
12
12
|
config?: boolean;
|
|
13
13
|
}
|
|
14
|
-
export interface
|
|
14
|
+
export interface ResetToolchainOptions extends ResetSelectors {
|
|
15
15
|
/** The project directory to reset. */
|
|
16
16
|
cwd: string;
|
|
17
17
|
/** Report what would be removed without deleting anything. */
|
|
18
18
|
dryRun?: boolean;
|
|
19
19
|
}
|
|
20
|
-
export interface
|
|
20
|
+
export interface ResetToolchainResult {
|
|
21
21
|
/** Repo-relative paths removed (or that would be removed). */
|
|
22
22
|
removed: string[];
|
|
23
23
|
/** Whether this was a dry run. */
|
|
@@ -29,7 +29,7 @@ export interface ResetToolingResult {
|
|
|
29
29
|
* the `dbx.config.*` file. With no selectors the generated files + the
|
|
30
30
|
* manifest directory are removed (the config is kept).
|
|
31
31
|
*/
|
|
32
|
-
export declare function
|
|
32
|
+
export declare function resetToolchain(options: ResetToolchainOptions): ResetToolchainResult;
|
|
33
33
|
export interface ResetProjectsOptions extends ResetSelectors, Omit<SelectProjectsOptions, 'kind'> {
|
|
34
34
|
/** Apply to every discovered project under `root` (not just `root`). */
|
|
35
35
|
recursive?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{findConfigFile as t}from"./loader.js";import{MANIFEST_DIR as n,readManifest as r}from"./manifest.js";import{selectProjects as i}from"./select.js";import a from"node:fs";function o(e){return e.replace(/\\/g,`/`)}function s(e){let t=e.generated!==void 0||e.manifest!==void 0||e.config!==void 0;return{generated:e.generated??!t,manifest:e.manifest??!t,config:e.config??!1}}function c(i){let{cwd:c}=i,l=i.dryRun??!1,u=s(i),d=[],f=(e,t)=>{a.existsSync(e)&&(l||a.rmSync(e,{force:!0}),d.push(t))};if(u.generated)for(let t of r(c).files)f(e.resolve(c,t),t);if(u.config){let n=t(c);n&&f(n,o(e.relative(c,n)))}if(u.manifest){let t=e.resolve(c,n);a.existsSync(t)&&(l||a.rmSync(t,{recursive:!0,force:!0}),d.push(`${n}/`))}return{removed:d,dryRun:l}}function l(e){let n=e.dryRun??!1;return{results:(e.recursive?i({root:e.root,...e.include?{include:e.include}:{},...e.exclude?{exclude:e.exclude}:{},...e.maxDepth===void 0?{}:{maxDepth:e.maxDepth}}):[{dir:e.root,rel:`.`,hasConfig:!!t(e.root)}]).map(t=>({dir:t.dir,rel:t.rel,removed:c({cwd:t.dir,...e.generated===void 0?{}:{generated:e.generated},...e.manifest===void 0?{}:{manifest:e.manifest},...e.config===void 0?{}:{config:e.config},dryRun:n}).removed})),dryRun:n}}export{l as resetProjects,c as
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{findConfigFile as t}from"./loader.js";import{MANIFEST_DIR as n,readManifest as r}from"./manifest.js";import{selectProjects as i}from"./select.js";import a from"node:fs";function o(e){return e.replace(/\\/g,`/`)}function s(e){let t=e.generated!==void 0||e.manifest!==void 0||e.config!==void 0;return{generated:e.generated??!t,manifest:e.manifest??!t,config:e.config??!1}}function c(i){let{cwd:c}=i,l=i.dryRun??!1,u=s(i),d=[],f=(e,t)=>{a.existsSync(e)&&(l||a.rmSync(e,{force:!0}),d.push(t))};if(u.generated)for(let t of r(c).files)f(e.resolve(c,t),t);if(u.config){let n=t(c);n&&f(n,o(e.relative(c,n)))}if(u.manifest){let t=e.resolve(c,n);a.existsSync(t)&&(l||a.rmSync(t,{recursive:!0,force:!0}),d.push(`${n}/`))}return{removed:d,dryRun:l}}function l(e){let n=e.dryRun??!1;return{results:(e.recursive?i({root:e.root,...e.include?{include:e.include}:{},...e.exclude?{exclude:e.exclude}:{},...e.maxDepth===void 0?{}:{maxDepth:e.maxDepth}}):[{dir:e.root,rel:`.`,hasConfig:!!t(e.root)}]).map(t=>({dir:t.dir,rel:t.rel,removed:c({cwd:t.dir,...e.generated===void 0?{}:{generated:e.generated},...e.manifest===void 0?{}:{manifest:e.manifest},...e.config===void 0?{}:{config:e.config},dryRun:n}).removed})),dryRun:n}}export{l as resetProjects,c as resetToolchain};
|
|
@@ -2,7 +2,7 @@ import __tsdown_shims_path from 'node:path';
|
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
3
|
import { Replacements } from "../../shared/src/template.js";
|
|
4
4
|
import { ProjectType } from "../../shared/src/config-types.js";
|
|
5
|
-
import { SyncTask,
|
|
5
|
+
import { SyncTask, ToolchainConfig } from "../../shared/src/toolchain.js";
|
|
6
6
|
import "../../shared/src/index.js";
|
|
7
7
|
//#region packages/core/src/sync.d.ts
|
|
8
8
|
export interface RunSyncOptions {
|
|
@@ -11,7 +11,7 @@ export interface RunSyncOptions {
|
|
|
11
11
|
/** The project root. */
|
|
12
12
|
cwd: string;
|
|
13
13
|
/** The loaded config. */
|
|
14
|
-
config:
|
|
14
|
+
config: ToolchainConfig;
|
|
15
15
|
/** The resolved replacement tokens. */
|
|
16
16
|
tokens: Replacements;
|
|
17
17
|
/** The project kind (resolved from the config/cwd when omitted). */
|
|
@@ -1,7 +1,7 @@
|
|
|
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 { SyncTask,
|
|
4
|
+
import { SyncTask, ToolchainConfig } from "../../shared/src/toolchain.js";
|
|
5
5
|
import "../../shared/src/index.js";
|
|
6
6
|
//#region packages/core/src/vscode.d.ts
|
|
7
7
|
export interface VscodeSyncOptions {
|
|
@@ -10,11 +10,11 @@ export interface VscodeSyncOptions {
|
|
|
10
10
|
* A function lets the patches depend on the config (eg. only inject Biome
|
|
11
11
|
* settings when the `biome` section is enabled).
|
|
12
12
|
*/
|
|
13
|
-
settings?: Record<string, unknown>[] | ((config:
|
|
13
|
+
settings?: Record<string, unknown>[] | ((config: ToolchainConfig) => Record<string, unknown>[]);
|
|
14
14
|
/** Recommended extensions (unioned with the consumer's existing list). */
|
|
15
15
|
extensions?: string[];
|
|
16
16
|
/** Whether the task runs (default: always). */
|
|
17
|
-
enabled?: (config:
|
|
17
|
+
enabled?: (config: ToolchainConfig) => boolean;
|
|
18
18
|
/** The project kinds the task applies to (default root + single project). */
|
|
19
19
|
projectTypes?: ProjectType[];
|
|
20
20
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import {
|
|
3
|
+
import { ToolchainMigration } from "./types.js";
|
|
4
4
|
//#region packages/migrate/src/biome.d.ts
|
|
5
5
|
/** The Biome config file names, in priority order. */
|
|
6
6
|
export declare const BIOME_CONFIG_FILES: readonly ['biome.json', 'biome.jsonc'];
|
|
@@ -13,6 +13,6 @@ export declare function findBiomeConfig(cwd: string): string | undefined;
|
|
|
13
13
|
export declare function stripJsonc(input: string): string;
|
|
14
14
|
/** Read and parse a JSON/JSONC file (BOM-tolerant). */
|
|
15
15
|
export declare function readJsonc(file: string): Record<string, any>;
|
|
16
|
-
/** Build the Biome ->
|
|
17
|
-
export declare const biomeToOx:
|
|
16
|
+
/** Build the Biome -> oxc migration. */
|
|
17
|
+
export declare const biomeToOx: ToolchainMigration;
|
|
18
18
|
//#endregion
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{default as e}from"node:path";import"node:url";import.meta.url;import{mapBiomeToOxfmt as t}from"./oxfmt-map.js";import{mapBiomeToOxlint as n}from"./oxlint-map.js";import{renderViteTarget as r}from"./vite-target.js";import i from"node:fs";const a=[`biome.json`,`biome.jsonc`];function o(t){for(let n of a){let r=e.join(t,n);if(i.existsSync(r))return r}}function s(e){let t=``,n=!1,r=``;for(let i=0;i<e.length;i++){let a=e[i];if(n)t+=a,a===`\\`?(t+=e[i+1]??``,i++):a===r&&(n=!1);else if(a===`"`||a===`'`)n=!0,r=a,t+=a;else if(a===`/`&&e[i+1]===`/`)for(;i<e.length&&e[i]!==`
|
|
2
|
-
`;)i++;else if(a===`/`&&e[i+1]===`*`){for(i+=2;i<e.length&&(e[i]!==`*`||e[i+1]!==`/`);)i++;i++}else t+=a}return t.replace(/,(\s*[}\]])/g,`$1`)}function c(e){let t=i.readFileSync(e,`utf-8`).replace(/^\uFEFF/,``);return JSON.parse(s(t))}const l={id:`biome-to-
|
|
2
|
+
`;)i++;else if(a===`/`&&e[i+1]===`*`){for(i+=2;i<e.length&&(e[i]!==`*`||e[i+1]!==`/`);)i++;i++}else t+=a}return t.replace(/,(\s*[}\]])/g,`$1`)}function c(e){let t=i.readFileSync(e,`utf-8`).replace(/^\uFEFF/,``);return JSON.parse(s(t))}const l={id:`biome-to-oxc`,from:`biome`,to:`oxc`,description:`Migrate Biome (formatter + organizeImports + linter) to Oxfmt/Oxlint.`,detect:e=>!!o(e),run:async a=>{let s=o(a.cwd);if(!s)throw Error(`biome-to-oxc: no biome.json/biome.jsonc found.`);let u=c(s),d=t(u),f=n(u,d.oxfmt.ignorePatterns??[]),p=[...d.unmapped,...f.unmapped],m=[`Source: ${e.basename(s)}.`,`Formatter + organizeImports + linter rules mapped.`];if((a.target??`files`)===`vite`){let e=r(a.cwd,{fmt:d.oxfmt,lint:f.oxlint});return a.write&&i.writeFileSync(e.path,e.content,`utf-8`),{id:l.id,from:`biome`,to:`oxc`,written:[e.path],files:[e],oxfmt:d.oxfmt,oxlint:f.oxlint,unmapped:p,notes:[...m,"Folded into vite.config.ts (`fmt` + `lint`)."]}}let h=[[`.oxfmtrc.json`,d.oxfmt],[`.oxlintrc.json`,f.oxlint]].map(([t,n])=>({path:e.join(a.cwd,t),content:`${JSON.stringify(n,null,4)}\n`}));if(a.write)for(let e of h)i.writeFileSync(e.path,e.content,`utf-8`);return{id:l.id,from:`biome`,to:`oxc`,written:h.map(e=>e.path),files:h,oxfmt:d.oxfmt,oxlint:f.oxlint,unmapped:p,notes:[...m,"Next: run `oxfmt` to reformat, then drop Biome.","Tip: `--target vite` folds this into vite.config.ts instead."]}}};export{a as BIOME_CONFIG_FILES,l as biomeToOx,o as findBiomeConfig,c as readJsonc,s as stripJsonc};
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import {
|
|
3
|
+
import { ToolchainCommand } from "../../../shared/src/types.js";
|
|
4
4
|
import "../../../shared/src/index.js";
|
|
5
5
|
//#region packages/migrate/src/cli/index.d.ts
|
|
6
6
|
/**
|
|
7
7
|
* `dbx migrate` — convert a project's tooling config from another
|
|
8
|
-
* tool (Biome / ESLint / Prettier / Dprint) to
|
|
9
|
-
*
|
|
8
|
+
* tool (Biome / ESLint / Prettier / Dprint) to Oxc (Oxfmt / Oxlint), or fold a
|
|
9
|
+
* hand-written `vite.config.*` into `dbx.config.*`. Dry-run by default; pass
|
|
10
|
+
* `--write` to apply, or `--check` for a CI gate.
|
|
10
11
|
*/
|
|
11
|
-
export declare function migrateCommands():
|
|
12
|
+
export declare function migrateCommands(): ToolchainCommand[];
|
|
12
13
|
//#endregion
|
|
@@ -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{diffFiles as n,hasPending as r}from"../check.js";import{detectMigrations as i,listMigrations as a,migrations as o}from"../registry.js";function s(){return[{name:`migrate`,description:`Migrate Biome / ESLint / Prettier / Dprint config to
|
|
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{diffFiles as n,hasPending as r}from"../check.js";import{detectMigrations as i,listMigrations as a,migrations as o}from"../registry.js";function s(){return[{name:`migrate`,description:`Migrate Biome / ESLint / Prettier / Dprint config to Oxc, or fold vite.config.* into dbx.config.`,options:[{flags:`--from <tool>`,description:`Source tool: biome | eslint | prettier | dprint | vite | all.`},{flags:`--to <tool>`,description:`Target tool (default: oxc).`,default:`oxc`},{flags:`--cwd <dir>`,description:`Project root (default: cwd).`},{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:`--json`,description:`Print the result as JSON.`}],run:async(a,s)=>{let c=a.cwd??s.cwd,l=!!a.check,u=!!a.write&&!a.dryRun&&!l,d=!!a.online,f=a.from,p=a.target??`files`,m=!f||f===`all`?i(c):o().filter(e=>e.from===f);if(m.length===0){t.info(f&&f!==`all`?`no "${f}" migration is registered.`:`nothing to migrate (no Biome/ESLint/Prettier/Dprint/vite config detected).`);return}let h=[];for(let e of m)h.push(await e.run({cwd:c,write:u,online:d,target:p}));if(l){let i=h.flatMap(e=>n(e.files??[])),o=i.filter(e=>e.status!==`same`);if(a.json)t.raw(JSON.stringify(h,null,4));else if(o.length){for(let n of o)t.info(`${n.status} ${e.relative(c,n.path)||n.path}`);t.info(`${o.length} file(s) out of date — run \`migrate --write\` to apply.`)}else t.info(`up to date.`);r(i)&&(process.exitCode=1)}else if(a.json)t.raw(JSON.stringify(h,null,4));else{for(let e of h){t.info(`${e.from} -> ${e.to} ${u?`wrote`:`would write`}`);for(let n of e.written)t.info(` ${u?`+`:`?`} ${n}`);for(let n of e.notes??[])t.info(` ${n}`);if(e.unmapped?.length){t.info(` unmapped (${e.unmapped.length}):`);for(let n of e.unmapped.slice(0,25))t.info(` - ${n.source}: ${n.reason}`)}}u||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=a(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{s as migrateCommands};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import {
|
|
3
|
+
import { ToolchainMigration } from "./types.js";
|
|
4
4
|
//#region packages/migrate/src/dprint.d.ts
|
|
5
5
|
type Json = Record<string, any>;
|
|
6
6
|
/** Locate a dprint config. */
|
|
@@ -13,6 +13,6 @@ export declare function mapDprintToOxfmt(dprint: Json): {
|
|
|
13
13
|
oxfmt: Json;
|
|
14
14
|
unmapped: string[];
|
|
15
15
|
};
|
|
16
|
-
export declare const dprintToOx:
|
|
16
|
+
export declare const dprintToOx: ToolchainMigration;
|
|
17
17
|
//#endregion
|
|
18
18
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{renderViteTarget as t}from"./vite-target.js";import n from"node:fs";const r=[`dprint.json`,`dprint.jsonc`,`.dprint.json`];function i(t){for(let i of r){let r=e.join(t,i);if(!n.existsSync(r))continue;let a=n.readFileSync(r,`utf-8`).replace(/^\uFEFF/,``).replace(/\/\*[\s\S]*?\*\//g,``).replace(/(^|[^:])\/\/.*$/gm,`$1`).replace(/,(\s*[}\]])/g,`$1`);try{return{file:r,config:JSON.parse(a)}}catch{}}}function a(e){let t={},n=e.typescript??{};typeof e.lineWidth==`number`&&(t.printWidth=e.lineWidth),typeof e.indentWidth==`number`&&(t.tabWidth=e.indentWidth),typeof e.useTabs==`boolean`&&(t.useTabs=e.useTabs),(e.newLineKind===`lf`||e.newLineKind===`crlf`)&&(t.endOfLine=e.newLineKind),n.quoteStyle&&(t.singleQuote=String(n.quoteStyle).includes(`Single`)||n.quoteStyle===`alwaysSingle`),n.semiColons&&(t.semi=n.semiColons!==`asi`),n.trailingCommas&&(t.trailingComma=n.trailingCommas===`always`?`all`:n.trailingCommas===`never`?`none`:`es5`);let r=[],i=[`lineWidth`,`indentWidth`,`useTabs`,`newLineKind`,`typescript`,`plugins`];for(let t of Object.keys(e))i.includes(t)||r.push(`dprint section: ${t}`);return Array.isArray(e.plugins)&&e.plugins.length&&r.push(`plugins (Oxfmt has built-in equivalents for common cases)`),{oxfmt:t,unmapped:r}}const o={id:`dprint-to-
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{renderViteTarget as t}from"./vite-target.js";import n from"node:fs";const r=[`dprint.json`,`dprint.jsonc`,`.dprint.json`];function i(t){for(let i of r){let r=e.join(t,i);if(!n.existsSync(r))continue;let a=n.readFileSync(r,`utf-8`).replace(/^\uFEFF/,``).replace(/\/\*[\s\S]*?\*\//g,``).replace(/(^|[^:])\/\/.*$/gm,`$1`).replace(/,(\s*[}\]])/g,`$1`);try{return{file:r,config:JSON.parse(a)}}catch{}}}function a(e){let t={},n=e.typescript??{};typeof e.lineWidth==`number`&&(t.printWidth=e.lineWidth),typeof e.indentWidth==`number`&&(t.tabWidth=e.indentWidth),typeof e.useTabs==`boolean`&&(t.useTabs=e.useTabs),(e.newLineKind===`lf`||e.newLineKind===`crlf`)&&(t.endOfLine=e.newLineKind),n.quoteStyle&&(t.singleQuote=String(n.quoteStyle).includes(`Single`)||n.quoteStyle===`alwaysSingle`),n.semiColons&&(t.semi=n.semiColons!==`asi`),n.trailingCommas&&(t.trailingComma=n.trailingCommas===`always`?`all`:n.trailingCommas===`never`?`none`:`es5`);let r=[],i=[`lineWidth`,`indentWidth`,`useTabs`,`newLineKind`,`typescript`,`plugins`];for(let t of Object.keys(e))i.includes(t)||r.push(`dprint section: ${t}`);return Array.isArray(e.plugins)&&e.plugins.length&&r.push(`plugins (Oxfmt has built-in equivalents for common cases)`),{oxfmt:t,unmapped:r}}const o={id:`dprint-to-oxc`,from:`dprint`,to:`oxfmt`,description:`Migrate a dprint.json (formatter) to Oxfmt.`,detect:e=>!!i(e),run:async r=>{let o=i(r.cwd);if(!o)throw Error(`dprint-to-oxc: no dprint.json found.`);let s=a(o.config),c=s.unmapped.map(e=>({source:e,reason:`no Oxfmt equivalent`})),l=[`Source: ${e.basename(o.file)}.`];if((r.target??`files`)===`vite`){let e=t(r.cwd,{fmt:s.oxfmt});return r.write&&n.writeFileSync(e.path,e.content,`utf-8`),{id:`dprint-to-oxc`,from:`dprint`,to:`oxfmt`,written:[e.path],files:[e],oxfmt:s.oxfmt,unmapped:c,notes:[...l,"Folded into vite.config.ts (`fmt`)."]}}let u={path:e.join(r.cwd,`.oxfmtrc.json`),content:`${JSON.stringify(s.oxfmt,null,4)}\n`};return r.write&&n.writeFileSync(u.path,u.content,`utf-8`),{id:`dprint-to-oxc`,from:`dprint`,to:`oxfmt`,written:[u.path],files:[u],oxfmt:s.oxfmt,unmapped:c,notes:l}}};export{o as dprintToOx,i as findDprintConfig,a as mapDprintToOxfmt};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import {
|
|
3
|
+
import { ToolchainMigration } from "./types.js";
|
|
4
4
|
//#region packages/migrate/src/eslint.d.ts
|
|
5
5
|
type Json = Record<string, any>;
|
|
6
6
|
/** The ESLint config in `cwd`, preferring JSON (parseable) then JS. */
|
|
@@ -19,6 +19,6 @@ export declare function mapRuleName(name: string): {
|
|
|
19
19
|
* migrator writes to disk, so callers only run it when writing.
|
|
20
20
|
*/
|
|
21
21
|
export declare function runOxlintMigrate(cwd: string): Promise<Json | undefined>;
|
|
22
|
-
export declare const eslintToOx:
|
|
22
|
+
export declare const eslintToOx: ToolchainMigration;
|
|
23
23
|
//#endregion
|
|
24
24
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{spawnCross as t}from"../../shared/src/run.js";import"../../shared/src/index.js";import{renderViteTarget as n}from"./vite-target.js";import r from"node:fs";const i=[`.eslintrc.json`,`.eslintrc`],a=[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc.js`,`.eslintrc.cjs`];function o(t){for(let n of i){let i=e.join(t,n);if(r.existsSync(i))return{file:i,json:!0}}for(let n of a){let i=e.join(t,n);if(r.existsSync(i))return{file:i,json:!1}}}function s(e){let t=Array.isArray(e)?e[0]:e;return t===2||t===`error`?`error`:t===1||t===`warn`?`warn`:`off`}function c(e){return e.startsWith(`@typescript-eslint/`)?{name:`typescript/${e.slice(19)}`,mapped:!0}:{name:e,mapped:!0}}function l(e,t,n){for(let[r,i]of Object.entries(e??{})){let e=c(r);t[e.name]=s(i),e.mapped||n.push({source:r,reason:`unknown plugin prefix`})}}function u(e,n,r){return new Promise(i=>{let a=t(e,n,{cwd:r,stdio:`inherit`});a.on(`error`,()=>i(1)),a.on(`exit`,e=>i(e??0))})}async function d(t){let n=e.join(t,`.oxlintrc.json`);if(await u(`npx`,[`--yes`,`@oxlint/migrate`],t)===0&&r.existsSync(n))try{return JSON.parse(r.readFileSync(n,`utf-8`).replace(/^\uFEFF/,``))}catch{return}}const f={id:`eslint-to-
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{spawnCross as t}from"../../shared/src/run.js";import"../../shared/src/index.js";import{renderViteTarget as n}from"./vite-target.js";import r from"node:fs";const i=[`.eslintrc.json`,`.eslintrc`],a=[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc.js`,`.eslintrc.cjs`];function o(t){for(let n of i){let i=e.join(t,n);if(r.existsSync(i))return{file:i,json:!0}}for(let n of a){let i=e.join(t,n);if(r.existsSync(i))return{file:i,json:!1}}}function s(e){let t=Array.isArray(e)?e[0]:e;return t===2||t===`error`?`error`:t===1||t===`warn`?`warn`:`off`}function c(e){return e.startsWith(`@typescript-eslint/`)?{name:`typescript/${e.slice(19)}`,mapped:!0}:{name:e,mapped:!0}}function l(e,t,n){for(let[r,i]of Object.entries(e??{})){let e=c(r);t[e.name]=s(i),e.mapped||n.push({source:r,reason:`unknown plugin prefix`})}}function u(e,n,r){return new Promise(i=>{let a=t(e,n,{cwd:r,stdio:`inherit`});a.on(`error`,()=>i(1)),a.on(`exit`,e=>i(e??0))})}async function d(t){let n=e.join(t,`.oxlintrc.json`);if(await u(`npx`,[`--yes`,`@oxlint/migrate`],t)===0&&r.existsSync(n))try{return JSON.parse(r.readFileSync(n,`utf-8`).replace(/^\uFEFF/,``))}catch{return}}const f={id:`eslint-to-oxc`,from:`eslint`,to:`oxlint`,description:`Migrate ESLint to Oxlint (JSON configs; flat configs via @oxlint/migrate --online).`,detect:e=>!!o(e),run:async t=>{let i=o(t.cwd);if(!i)throw Error(`eslint-to-oxc: no ESLint config found.`);let a={},s=[],c=[`Source: ${e.basename(i.file)}.`];if(i.json)l(JSON.parse(r.readFileSync(i.file,`utf-8`).replace(/^\uFEFF/,``)).rules,a,s);else if(t.online&&t.write){let e=await d(t.cwd);e?(l(e.rules,a,s),c.push("Rules evaluated with `@oxlint/migrate` (online).")):c.push("`@oxlint/migrate` did not produce `.oxlintrc.json`; hand-map the rules.")}else t.online?c.push("Flat config: online evaluation runs `@oxlint/migrate`, which writes `.oxlintrc.json` — re-run with `--write`."):c.push("Flat config detected — re-run with `--online --write` to use `@oxlint/migrate`, or hand-map the rules.");let u={$schema:`./node_modules/oxlint/configuration_schema.json`,rules:a};if((t.target??`files`)===`vite`){let e=n(t.cwd,{lint:u});return t.write&&r.writeFileSync(e.path,e.content,`utf-8`),{id:f.id,from:`eslint`,to:`oxlint`,written:[e.path],files:[e],oxlint:u,unmapped:s,notes:[...c,"Folded into vite.config.ts (`lint`)."]}}let p={path:e.join(t.cwd,`.oxlintrc.json`),content:`${JSON.stringify(u,null,4)}\n`};return t.write&&r.writeFileSync(p.path,p.content,`utf-8`),{id:f.id,from:`eslint`,to:`oxlint`,written:[p.path],files:[p],oxlint:u,unmapped:s,notes:c}}};export{f as eslintToOx,o as findEslintConfig,c as mapRuleName,d as runOxlintMigrate};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import { MigrateTarget, MigrateTool, MigrationContext, MigrationFile, MigrationResult,
|
|
3
|
+
import { MigrateTarget, MigrateTool, MigrationContext, MigrationFile, MigrationResult, ToolchainMigration, UnmappedItem } from "./types.js";
|
|
4
4
|
import { BIOME_CONFIG_FILES, biomeToOx, findBiomeConfig, readJsonc, stripJsonc } from "./biome.js";
|
|
5
5
|
import { FileDiff, FileStatus, diffFiles, hasPending } from "./check.js";
|
|
6
6
|
import { migrateCommands } from "./cli/index.js";
|
|
@@ -10,5 +10,6 @@ import { DEFAULT_IGNORE, OxfmtMapping, mapBiomeFormatter, mapBiomeIncludes, mapB
|
|
|
10
10
|
import { OxlintMapping, RULE_MAP, mapBiomeToOxlint } from "./oxlint-map.js";
|
|
11
11
|
import { findPrettierConfig, mapPrettierToOxfmt, prettierToOx, readPrettierIgnore } from "./prettier.js";
|
|
12
12
|
import { MigrationInfo, detectMigrations, findMigration, listMigrations, migrations, runDetectedMigrations, runMigration } from "./registry.js";
|
|
13
|
+
import { VITE_CONFIG_FILES, ensureViteFmtIgnore, extractViteObject, findDbxConfig, findViteConfig, foldViteIntoConfig, scanLiteralObject, viteToToolchain } from "./vite.js";
|
|
13
14
|
import { findTopLevelValue, matchBracket, mergeViteConfig, renderViteTarget, serializeTs, writeViteTarget } from "./vite-target.js";
|
|
14
|
-
export { BIOME_CONFIG_FILES, DEFAULT_IGNORE, FileDiff, FileStatus, MigrateTarget, MigrateTool, MigrationContext, MigrationFile, MigrationInfo, MigrationResult, OxfmtMapping, OxlintMapping, RULE_MAP,
|
|
15
|
+
export { BIOME_CONFIG_FILES, DEFAULT_IGNORE, FileDiff, FileStatus, MigrateTarget, MigrateTool, MigrationContext, MigrationFile, MigrationInfo, MigrationResult, OxfmtMapping, OxlintMapping, RULE_MAP, ToolchainMigration, UnmappedItem, VITE_CONFIG_FILES, biomeToOx, detectMigrations, diffFiles, dprintToOx, ensureViteFmtIgnore, eslintToOx, extractViteObject, findBiomeConfig, findDbxConfig, findDprintConfig, findEslintConfig, findMigration, findPrettierConfig, findTopLevelValue, findViteConfig, foldViteIntoConfig, hasPending, listMigrations, mapBiomeFormatter, mapBiomeIncludes, mapBiomeToOxfmt, mapBiomeToOxlint, mapDprintToOxfmt, mapOrganizeImports, mapPrettierToOxfmt, mapRuleName, matchBracket, mergeViteConfig, migrateCommands, migrations, prettierToOx, readJsonc, readPrettierIgnore, renderViteTarget, runDetectedMigrations, runMigration, runOxlintMigrate, scanLiteralObject, serializeTs, stripJsonc, viteToToolchain, writeViteTarget };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:path";import"node:url";import.meta.url;import{diffFiles as e,hasPending as t}from"./check.js";import{DEFAULT_IGNORE as n,mapBiomeFormatter as r,mapBiomeIncludes as i,mapBiomeToOxfmt as a,mapOrganizeImports as o}from"./oxfmt-map.js";import{RULE_MAP as s,mapBiomeToOxlint as c}from"./oxlint-map.js";import{findTopLevelValue as l,matchBracket as u,mergeViteConfig as d,renderViteTarget as f,serializeTs as p,writeViteTarget as m}from"./vite-target.js";import{BIOME_CONFIG_FILES as h,biomeToOx as g,findBiomeConfig as _,readJsonc as v,stripJsonc as y}from"./biome.js";import{dprintToOx as b,findDprintConfig as x,mapDprintToOxfmt as S}from"./dprint.js";import{eslintToOx as C,findEslintConfig as w,mapRuleName as T,runOxlintMigrate as E}from"./eslint.js";import{findPrettierConfig as D,mapPrettierToOxfmt as O,prettierToOx as k,readPrettierIgnore as A}from"./prettier.js";import{
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;import{diffFiles as e,hasPending as t}from"./check.js";import{DEFAULT_IGNORE as n,mapBiomeFormatter as r,mapBiomeIncludes as i,mapBiomeToOxfmt as a,mapOrganizeImports as o}from"./oxfmt-map.js";import{RULE_MAP as s,mapBiomeToOxlint as c}from"./oxlint-map.js";import{findTopLevelValue as l,matchBracket as u,mergeViteConfig as d,renderViteTarget as f,serializeTs as p,writeViteTarget as m}from"./vite-target.js";import{BIOME_CONFIG_FILES as h,biomeToOx as g,findBiomeConfig as _,readJsonc as v,stripJsonc as y}from"./biome.js";import{dprintToOx as b,findDprintConfig as x,mapDprintToOxfmt as S}from"./dprint.js";import{eslintToOx as C,findEslintConfig as w,mapRuleName as T,runOxlintMigrate as E}from"./eslint.js";import{findPrettierConfig as D,mapPrettierToOxfmt as O,prettierToOx as k,readPrettierIgnore as A}from"./prettier.js";import{VITE_CONFIG_FILES as j,ensureViteFmtIgnore as M,extractViteObject as N,findDbxConfig as P,findViteConfig as F,foldViteIntoConfig as I,scanLiteralObject as L,viteToToolchain as R}from"./vite.js";import{detectMigrations as z,findMigration as B,listMigrations as V,migrations as H,runDetectedMigrations as U,runMigration as W}from"./registry.js";import{migrateCommands as G}from"./cli/index.js";export{h as BIOME_CONFIG_FILES,n as DEFAULT_IGNORE,s as RULE_MAP,j as VITE_CONFIG_FILES,g as biomeToOx,z as detectMigrations,e as diffFiles,b as dprintToOx,M as ensureViteFmtIgnore,C as eslintToOx,N as extractViteObject,_ as findBiomeConfig,P as findDbxConfig,x as findDprintConfig,w as findEslintConfig,B as findMigration,D as findPrettierConfig,l as findTopLevelValue,F as findViteConfig,I as foldViteIntoConfig,t as hasPending,V as listMigrations,r as mapBiomeFormatter,i as mapBiomeIncludes,a as mapBiomeToOxfmt,c as mapBiomeToOxlint,S as mapDprintToOxfmt,o as mapOrganizeImports,O as mapPrettierToOxfmt,T as mapRuleName,u as matchBracket,d as mergeViteConfig,G as migrateCommands,H as migrations,k as prettierToOx,v as readJsonc,A as readPrettierIgnore,f as renderViteTarget,U as runDetectedMigrations,W as runMigration,E as runOxlintMigrate,L as scanLiteralObject,p as serializeTs,y as stripJsonc,R as viteToToolchain,m as writeViteTarget};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import {
|
|
3
|
+
import { ToolchainMigration } from "./types.js";
|
|
4
4
|
//#region packages/migrate/src/prettier.d.ts
|
|
5
5
|
type Json = Record<string, any>;
|
|
6
6
|
/** Locate a Prettier config (JSON files or the `prettier` package.json field). */
|
|
@@ -15,6 +15,6 @@ export declare function mapPrettierToOxfmt(prettier: Json): {
|
|
|
15
15
|
oxfmt: Json;
|
|
16
16
|
unmapped: string[];
|
|
17
17
|
};
|
|
18
|
-
export declare const prettierToOx:
|
|
18
|
+
export declare const prettierToOx: ToolchainMigration;
|
|
19
19
|
//#endregion
|
|
20
20
|
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{default as e}from"node:path";import"node:url";import.meta.url;import{renderViteTarget as t}from"./vite-target.js";import n from"node:fs";const r=[`.prettierrc`,`.prettierrc.json`,`.prettierrc.jsonc`,`prettier.config.json`],i=[`printWidth`,`tabWidth`,`useTabs`,`semi`,`singleQuote`,`jsxSingleQuote`,`quoteProps`,`trailingComma`,`bracketSpacing`,`bracketSameLine`,`arrowParens`,`endOfLine`,`singleAttributePerLine`,`htmlWhitespaceSensitivity`,`vueIndentScriptAndStyle`];function a(t){for(let i of r){let r=e.join(t,i);if(n.existsSync(r)){let e=n.readFileSync(r,`utf-8`).replace(/^\uFEFF/,``);try{return{file:r,config:JSON.parse(e)}}catch{}}}let i=e.join(t,`package.json`);if(n.existsSync(i))try{let e=JSON.parse(n.readFileSync(i,`utf-8`));if(e.prettier&&typeof e.prettier==`object`)return{file:i,config:e.prettier}}catch{}}function o(t){let r=e.join(t,`.prettierignore`);return n.existsSync(r)?n.readFileSync(r,`utf-8`).split(`
|
|
2
|
-
`).map(e=>e.trim()).filter(e=>e&&!e.startsWith(`#`)):[]}function s(e){let t={},n=[];for(let n of i)n in e&&(t[n]=e[n]);let r=Array.isArray(e.plugins)?e.plugins:[];for(let e of r)e.includes(`tailwindcss`)?t.sortTailwindcss=!0:e.includes(`packagejson`)?t.sortPackageJson=!0:n.push(`plugin: ${e}`);for(let t of Object.keys(e))!i.includes(t)&&t!==`plugins`&&t!==`overrides`&&n.push(`option: ${t}`),t===`overrides`&&n.push("option: overrides (convert to Oxfmt `overrides` manually)");return{oxfmt:t,unmapped:n}}const c={id:`prettier-to-
|
|
2
|
+
`).map(e=>e.trim()).filter(e=>e&&!e.startsWith(`#`)):[]}function s(e){let t={},n=[];for(let n of i)n in e&&(t[n]=e[n]);let r=Array.isArray(e.plugins)?e.plugins:[];for(let e of r)e.includes(`tailwindcss`)?t.sortTailwindcss=!0:e.includes(`packagejson`)?t.sortPackageJson=!0:n.push(`plugin: ${e}`);for(let t of Object.keys(e))!i.includes(t)&&t!==`plugins`&&t!==`overrides`&&n.push(`option: ${t}`),t===`overrides`&&n.push("option: overrides (convert to Oxfmt `overrides` manually)");return{oxfmt:t,unmapped:n}}const c={id:`prettier-to-oxc`,from:`prettier`,to:`oxfmt`,description:`Migrate a Prettier config to Oxfmt (.oxfmtrc.json).`,detect:e=>!!a(e),run:async r=>{let i=a(r.cwd);if(!i)throw Error(`prettier-to-oxc: no Prettier config found.`);let l=s(i.config),u=o(r.cwd);u.length&&(l.oxfmt.ignorePatterns=u);let d=l.unmapped.map(e=>({source:e,reason:`no Oxfmt equivalent`}));if((r.target??`files`)===`vite`){let a=t(r.cwd,{fmt:l.oxfmt});return r.write&&n.writeFileSync(a.path,a.content,`utf-8`),{id:c.id,from:`prettier`,to:`oxfmt`,written:[a.path],files:[a],oxfmt:l.oxfmt,unmapped:d,notes:[`Source: ${e.basename(i.file)}.`,"Folded into vite.config.ts (`fmt`)."]}}let f={path:e.join(r.cwd,`.oxfmtrc.json`),content:`${JSON.stringify(l.oxfmt,null,4)}\n`};return r.write&&n.writeFileSync(f.path,f.content,`utf-8`),{id:c.id,from:`prettier`,to:`oxfmt`,written:[f.path],files:[f],oxfmt:l.oxfmt,unmapped:d,notes:[`Source: ${e.basename(i.file)}.`]}}};export{a as findPrettierConfig,s as mapPrettierToOxfmt,c as prettierToOx,o as readPrettierIgnore};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import { MigrateTool, MigrationContext, MigrationResult,
|
|
3
|
+
import { MigrateTool, MigrationContext, MigrationResult, ToolchainMigration } from "./types.js";
|
|
4
4
|
//#region packages/migrate/src/registry.d.ts
|
|
5
5
|
/** Every registered migration. */
|
|
6
|
-
export declare function migrations():
|
|
6
|
+
export declare function migrations(): ToolchainMigration[];
|
|
7
7
|
/** A migration summary for listings. */
|
|
8
8
|
export interface MigrationInfo {
|
|
9
9
|
id: string;
|
|
@@ -16,9 +16,9 @@ export interface MigrationInfo {
|
|
|
16
16
|
/** Describe every migration, flagging which are detected in `cwd`. */
|
|
17
17
|
export declare function listMigrations(cwd: string): MigrationInfo[];
|
|
18
18
|
/** The migrations whose source config is present in `cwd`. */
|
|
19
|
-
export declare function detectMigrations(cwd: string):
|
|
19
|
+
export declare function detectMigrations(cwd: string): ToolchainMigration[];
|
|
20
20
|
/** Find a migration by id, or by source tool. */
|
|
21
|
-
export declare function findMigration(idOrFrom: string):
|
|
21
|
+
export declare function findMigration(idOrFrom: string): ToolchainMigration | undefined;
|
|
22
22
|
/** Run one migration by id (or source tool name). */
|
|
23
23
|
export declare function runMigration(idOrFrom: string, ctx: MigrationContext): Promise<MigrationResult>;
|
|
24
24
|
/** Run every migration detected in `ctx.cwd`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:path";import"node:url";import.meta.url;import{biomeToOx as e}from"./biome.js";import{dprintToOx as t}from"./dprint.js";import{eslintToOx as n}from"./eslint.js";import{prettierToOx as r}from"./prettier.js";function
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;import{biomeToOx as e}from"./biome.js";import{dprintToOx as t}from"./dprint.js";import{eslintToOx as n}from"./eslint.js";import{prettierToOx as r}from"./prettier.js";import{viteToToolchain as i}from"./vite.js";function a(){return[e,r,t,n,i]}function o(e){return a().map(t=>({id:t.id,from:t.from,to:t.to,description:t.description,detected:t.detect(e)}))}function s(e){return a().filter(t=>t.detect(e))}function c(e){return a().find(t=>t.id===e||t.from===e)}async function l(e,t){let n=c(e);if(!n)throw Error(`Unknown migration "${e}".`);return n.run(t)}async function u(e){let t=[];for(let n of s(e.cwd))t.push(await n.run(e));return t}export{s as detectMigrations,c as findMigration,o as listMigrations,a as migrations,u as runDetectedMigrations,l as runMigration};
|
|
@@ -5,12 +5,12 @@ import __tsdown_shims_url from 'node:url';
|
|
|
5
5
|
* The migration model.
|
|
6
6
|
*
|
|
7
7
|
* A *migration* converts a project's tooling config from a source tool (Biome,
|
|
8
|
-
* ESLint, Prettier, ...) to a target tool (Oxfmt / Oxlint, ie. "
|
|
8
|
+
* ESLint, Prettier, ...) to a target tool (Oxfmt / Oxlint, ie. "oxc"). Migrations
|
|
9
9
|
* are pluggable: registering one here exposes it through the `dbx
|
|
10
10
|
* migrate` CLI, the programmatic API and (over JSON) the VS Code extension.
|
|
11
11
|
*/
|
|
12
12
|
/** A tool a migration can read from or write to. */
|
|
13
|
-
export type MigrateTool = 'biome' | 'eslint' | 'prettier' | 'dprint' | 'oxfmt' | 'oxlint' | '
|
|
13
|
+
export type MigrateTool = 'biome' | 'eslint' | 'prettier' | 'dprint' | 'oxfmt' | 'oxlint' | 'oxc' | 'vite' | 'toolchain';
|
|
14
14
|
/** Where a migration writes its result. */
|
|
15
15
|
export type MigrateTarget = 'files' | 'vite';
|
|
16
16
|
export interface MigrationContext {
|
|
@@ -58,8 +58,8 @@ export interface MigrationResult {
|
|
|
58
58
|
notes?: string[];
|
|
59
59
|
}
|
|
60
60
|
/** A pluggable config migration. */
|
|
61
|
-
export interface
|
|
62
|
-
/** Stable id, eg. `biome-to-
|
|
61
|
+
export interface ToolchainMigration {
|
|
62
|
+
/** Stable id, eg. `biome-to-oxc`. */
|
|
63
63
|
id: string;
|
|
64
64
|
/** The source tool. */
|
|
65
65
|
from: MigrateTool;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import __tsdown_shims_path from 'node:path';
|
|
2
|
+
import __tsdown_shims_url from 'node:url';
|
|
3
|
+
import { ToolchainMigration } from "./types.js";
|
|
4
|
+
//#region packages/migrate/src/vite.d.ts
|
|
5
|
+
/** The root Vite config file names, in priority order. */
|
|
6
|
+
export declare const VITE_CONFIG_FILES: readonly ['vite.config.ts', 'vite.config.mts', 'vite.config.js', 'vite.config.mjs'];
|
|
7
|
+
/** The Vite config in `cwd`, if present. */
|
|
8
|
+
export declare function findViteConfig(cwd: string): string | undefined;
|
|
9
|
+
/** The nearest `dbx.config.*` in `cwd`, if present. */
|
|
10
|
+
export declare function findDbxConfig(cwd: string): string | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Extract the object literal passed to `defineConfig(...)`, or the
|
|
13
|
+
* default-exported object when there is no `defineConfig`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function extractViteObject(source: string): {
|
|
16
|
+
text: string;
|
|
17
|
+
} | {
|
|
18
|
+
error: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Whether `text` (an object literal, braces included) is made only of literals:
|
|
22
|
+
* objects, arrays, strings, numbers, booleans, `null`/`undefined` and bare keys.
|
|
23
|
+
* Any other identifier (a variable, import, plugin call), spread or template
|
|
24
|
+
* literal makes it non-foldable.
|
|
25
|
+
*/
|
|
26
|
+
export declare function scanLiteralObject(text: string): {
|
|
27
|
+
ok: true;
|
|
28
|
+
} | {
|
|
29
|
+
ok: false;
|
|
30
|
+
reason: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Fold `objectText` into the `toolchain.vite` of a `dbx.config.*` source by
|
|
34
|
+
* text-splicing (inserting or replacing the `vite` value), never rewriting the
|
|
35
|
+
* whole file. Returns the new source, or an error when the `toolchain` object
|
|
36
|
+
* cannot be located.
|
|
37
|
+
*/
|
|
38
|
+
export declare function foldViteIntoConfig(source: string, objectText: string): {
|
|
39
|
+
content: string;
|
|
40
|
+
} | {
|
|
41
|
+
error: string;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Ensure `fmt.ignorePatterns` contains `'/vite.config.ts'` in a folded Vite
|
|
45
|
+
* object literal, so Oxfmt does not reformat the generated root `vite.config.ts`
|
|
46
|
+
* shim (which would make `dbx sync --check` drift). Works on the object text
|
|
47
|
+
* (braces included) with the same balanced scanner used to fold it in.
|
|
48
|
+
*/
|
|
49
|
+
export declare function ensureViteFmtIgnore(objectText: string): string;
|
|
50
|
+
/** Fold a hand-written root `vite.config.*` into `dbx.config.*`. */
|
|
51
|
+
export declare const viteToToolchain: ToolchainMigration;
|
|
52
|
+
//#endregion
|
|
@@ -0,0 +1,5 @@
|
|
|
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 r}from"./vite-target.js";import i from"node:fs";const a=[`vite.config.ts`,`vite.config.mts`,`vite.config.js`,`vite.config.mjs`];function o(t){for(let n of a){let r=e.join(t,n);if(i.existsSync(r))return r}}function s(n){for(let r of t){let t=e.join(n,r);if(i.existsSync(t))return t}}function c(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 l(e,t){let n=e.lastIndexOf(`
|
|
3
|
+
`,t-1)+1;return e.slice(n).match(/^[ \t]*/)?.[0]??``}function u(e,t){return e.split(`
|
|
4
|
+
`).map((e,n)=>n===0?e:`${t}${e}`).join(`
|
|
5
|
+
`)}function d(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*/);if(!t||t.index===void 0)return;n=t.index+t[0].length}let i=n;for(;i<e.length&&e[i]!==`{`;)i++;if(i>=e.length)return;let a=r(e,i);return a===-1?void 0:[i,a]}function f(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*/);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 i=r(e,n);return i===-1?{error:`unbalanced braces in the config object`}:{text:e.slice(n,i)}}function p(e){let t=0;for(;t<e.length;){let n=e[t];if(n==="`")return{ok:!1,reason:`template literal`};let r=c(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 m(e,t){let r=d(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,f=n(e,s,c,`vite`);if(f){let[n,r]=f,i=u(t,l(e,n));return{content:`${e.slice(0,n)}${i}${e.slice(r)}`}}let p=`${l(e,s)} `,m=u(t,p);return{content:`${e.slice(0,s+1)}\n${p}vite: ${m},${e.slice(s+1)}`}}const h=`/vite.config.ts`;function g(e){let t=e.indexOf(`{`);if(t===-1)return e;let i=r(e,t);if(i===-1)return e;let a=`'${h}'`,o=n(e,t,i,`fmt`);if(o&&e[o[0]]===`{`&&e[o[1]-1]===`}`){let[t,r]=o,i=n(e,t,r,`ignorePatterns`);if(i){let[t,n]=i;return e.slice(t,n).includes(h)?e:e[t]===`[`?`${e.slice(0,t+1)}${a}, ${e.slice(t+1)}`:`${e.slice(0,t)}[${a}]${e.slice(n)}`}return`${e.slice(0,t+1)} ignorePatterns: [${a}],${e.slice(t+1)}`}return o?`${e.slice(0,o[0])}{ ignorePatterns: [${a}] }${e.slice(o[1])}`:`${e.slice(0,t+1)} fmt: { ignorePatterns: [${a}] },${e.slice(t+1)}`}const _={id:`vite-to-toolchain`,from:`vite`,to:`toolchain`,description:"Fold a hand-written root vite.config.* into dbx.config.* (`toolchain.vite`).",detect:e=>!!o(e),run:async t=>{let n=o(t.cwd);if(!n)throw Error(`vite-to-toolchain: no vite.config.* found.`);let r=i.readFileSync(n,`utf-8`).replace(/^\uFEFF/,``),a=[`Source: ${e.basename(n)}.`],c=[],l=()=>({id:_.id,from:`vite`,to:`toolchain`,written:[],files:[],unmapped:c,notes:a}),u=s(t.cwd);if(!u)return c.push({source:e.basename(n),reason:`no dbx.config.* found to fold into`}),a.push(`Create a dbx.config.* first, then re-run this migration.`),l();if(u.endsWith(`.json`))return c.push({source:e.basename(u),reason:`JSON configs cannot hold the extracted object by text-splice`}),a.push(`Fold into the JSON config by hand.`),l();let d=f(r);if(`error`in d)return c.push({source:e.basename(n),reason:d.error}),a.push(`Left vite.config.* unchanged; fold it by hand.`),l();let v=p(d.text);if(!v.ok)return c.push({source:e.basename(n),reason:`cannot fold faithfully (${v.reason})`}),a.push(`The config references helpers/imports or non-literal expressions; fold it by hand.`),l();let y=m(i.readFileSync(u,`utf-8`).replace(/^\uFEFF/,``),g(d.text));if(`error`in y)return c.push({source:e.basename(u),reason:y.error}),a.push("Left dbx.config.* unchanged; fold `toolchain.vite` in by hand."),l();let b={path:u,content:y.content};return t.write&&i.writeFileSync(u,b.content,`utf-8`),a.push(`Folded into \`toolchain.vite\` (${e.basename(u)}); added \`${h}\` to \`fmt.ignorePatterns\`; run \`dbx sync\` to regenerate vite.config.ts.`),{id:_.id,from:`vite`,to:`toolchain`,written:[u],files:[b],notes:a}}};export{a as VITE_CONFIG_FILES,g as ensureViteFmtIgnore,f as extractViteObject,s as findDbxConfig,o as findViteConfig,m as foldViteIntoConfig,p as scanLiteralObject,_ as viteToToolchain};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import __tsdown_shims_path from 'node:path';
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
|
-
import {
|
|
3
|
+
import { ToolchainCommand } from "../../../shared/src/types.js";
|
|
4
4
|
import "../../../shared/src/index.js";
|
|
5
5
|
//#region packages/project/src/cli/index.d.ts
|
|
6
6
|
/** Build the project scaffolding commands. */
|
|
7
|
-
export declare function projectCommands():
|
|
7
|
+
export declare function projectCommands(): ToolchainCommand[];
|
|
8
8
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as e}from"node:path";import"node:url";import.meta.url;import{readJsonAt as t}from"../../shared/src/fs-utils.js";import"../../shared/src/index.js";import{detectProjectType as n}from"../../core/src/project-type.js";import{selectProjects as r}from"../../core/src/select.js";import"../../core/src/index.js";import{
|
|
1
|
+
import{default as e}from"node:path";import"node:url";import.meta.url;import{readJsonAt as t}from"../../shared/src/fs-utils.js";import"../../shared/src/index.js";import{detectProjectType as n}from"../../core/src/project-type.js";import{selectProjects as r}from"../../core/src/select.js";import"../../core/src/index.js";import{renderToolchainConfig as i}from"./typescript.js";import a from"node:fs";const o=`dbx.config.ts`;function s(t,n){if(!t)return{name:e.basename(n)};let r=t.match(/^(@[^/]+)\/(.+)$/);return r?.[1]&&r[2]?{name:r[2],scope:r[1]}:{name:t}}function c(c){let l=c.dryRun??!1,u=c.force??!1,d=r({root:c.root,...c.include?{include:c.include}:{},...c.exclude?{exclude:c.exclude}:{},...c.maxDepth===void 0?{}:{maxDepth:c.maxDepth}}),f=[],p=[],m=[];for(let r of d){let d=e.join(r.dir,o);if((r.hasConfig||a.existsSync(d))&&!u){m.push(r.rel),f.push({dir:r.dir,rel:r.rel,...r.name?{name:r.name}:{},type:c.type??n(r.dir),configPath:d,created:!1,skipped:`has config`});continue}let h=c.type??n(r.dir),g=t(r.dir,`package.json`),{name:_,scope:v}=s(r.name??g?.name,r.dir),y=i({name:_,...v?{scope:v}:{},type:h});l||a.writeFileSync(d,y,`utf-8`),p.push(r.rel),f.push({dir:r.dir,rel:r.rel,...r.name?{name:r.name}:{},type:h,configPath:d,created:!0})}return{configs:f,created:p,skipped:m,dryRun:l}}export{o as GENERATED_CONFIG_FILENAME,c as generateProjectConfigs};
|
|
@@ -2,9 +2,9 @@ import __tsdown_shims_path from 'node:path';
|
|
|
2
2
|
import __tsdown_shims_url from 'node:url';
|
|
3
3
|
import { projectCommands } from "./cli/index.js";
|
|
4
4
|
import { GENERATED_CONFIG_FILENAME, GenerateProjectConfigsOptions, GenerateProjectConfigsResult, GeneratedProjectConfig, generateProjectConfigs } from "./config.js";
|
|
5
|
-
import { MonorepoRootContext, ProjectContext, WorkspaceContext, createMonorepoRootFiles, createRootProjectFiles, createWorkspaceFiles, renderGitignore,
|
|
5
|
+
import { MonorepoRootContext, ProjectContext, WorkspaceContext, createMonorepoRootFiles, createRootProjectFiles, createWorkspaceFiles, renderGitignore, renderToolchainConfig, renderTurboJson, renderWorkspaceTsconfig, writeGeneratedFiles } from "./typescript.js";
|
|
6
6
|
declare namespace index_d_exports {
|
|
7
|
-
export { GENERATED_CONFIG_FILENAME, GenerateProjectConfigsOptions, GenerateProjectConfigsResult, GeneratedProjectConfig, MonorepoRootContext, ProjectContext, WorkspaceContext, createMonorepoRootFiles, createRootProjectFiles, createWorkspaceFiles, generateProjectConfigs, projectCommands, renderGitignore,
|
|
7
|
+
export { GENERATED_CONFIG_FILENAME, GenerateProjectConfigsOptions, GenerateProjectConfigsResult, GeneratedProjectConfig, MonorepoRootContext, ProjectContext, WorkspaceContext, createMonorepoRootFiles, createRootProjectFiles, createWorkspaceFiles, generateProjectConfigs, projectCommands, renderGitignore, renderToolchainConfig, renderTurboJson, renderWorkspaceTsconfig, writeGeneratedFiles };
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
10
|
-
export { GENERATED_CONFIG_FILENAME, GenerateProjectConfigsOptions, GenerateProjectConfigsResult, GeneratedProjectConfig, MonorepoRootContext, ProjectContext, WorkspaceContext, createMonorepoRootFiles, createRootProjectFiles, createWorkspaceFiles, generateProjectConfigs, index_d_exports, projectCommands, renderGitignore,
|
|
10
|
+
export { GENERATED_CONFIG_FILENAME, GenerateProjectConfigsOptions, GenerateProjectConfigsResult, GeneratedProjectConfig, MonorepoRootContext, ProjectContext, WorkspaceContext, createMonorepoRootFiles, createRootProjectFiles, createWorkspaceFiles, generateProjectConfigs, index_d_exports, projectCommands, renderGitignore, renderToolchainConfig, renderTurboJson, renderWorkspaceTsconfig, writeGeneratedFiles };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{createMonorepoRootFiles as t,createRootProjectFiles as n,createWorkspaceFiles as r,renderGitignore as i,
|
|
1
|
+
import"node:path";import"node:url";import.meta.url;import{__exportAll as e}from"../../../_virtual/_rolldown/runtime.js";import{createMonorepoRootFiles as t,createRootProjectFiles as n,createWorkspaceFiles as r,renderGitignore as i,renderToolchainConfig as a,renderTurboJson as o,renderWorkspaceTsconfig as s,writeGeneratedFiles as c}from"./typescript.js";import{GENERATED_CONFIG_FILENAME as l,generateProjectConfigs as u}from"./config.js";import{projectCommands as d}from"./cli/index.js";var f=/* @__PURE__ */ e({GENERATED_CONFIG_FILENAME:()=>l,createMonorepoRootFiles:()=>t,createRootProjectFiles:()=>n,createWorkspaceFiles:()=>r,generateProjectConfigs:()=>u,projectCommands:()=>d,renderGitignore:()=>i,renderToolchainConfig:()=>a,renderTurboJson:()=>o,renderWorkspaceTsconfig:()=>s,writeGeneratedFiles:()=>c});export{l as GENERATED_CONFIG_FILENAME,t as createMonorepoRootFiles,n as createRootProjectFiles,r as createWorkspaceFiles,u as generateProjectConfigs,d as projectCommands,i as renderGitignore,a as renderToolchainConfig,o as renderTurboJson,s as renderWorkspaceTsconfig,f as src_exports,c as writeGeneratedFiles};
|
|
@@ -34,7 +34,7 @@ export interface ProjectContext {
|
|
|
34
34
|
* `project.type` lets the sync know whether the folder is a monorepo root, a
|
|
35
35
|
* workspace, or a single project.
|
|
36
36
|
*/
|
|
37
|
-
export declare function
|
|
37
|
+
export declare function renderToolchainConfig(ctx: ProjectContext & {
|
|
38
38
|
type: ProjectType;
|
|
39
39
|
}): string;
|
|
40
40
|
/** A minimal tsconfig.json that extends the default template. */
|
|
@@ -19,4 +19,4 @@ export default defineConfig({
|
|
|
19
19
|
entry: { index: 'src/index.ts' },
|
|
20
20
|
});
|
|
21
21
|
`}]}function m(){return c({$schema:`https://turborepo.dev/schema.json`,ui:`stream-with-experimental-timestamps`,globalDependencies:[`tsconfig.json`,`tsconfig.base.json`,`tsdown.config.ts`,`yarn.lock`],globalPassThroughEnv:[`NODE_ENV`,`VITE_*`],tasks:{build:{inputs:[`$TURBO_DEFAULT$`,`.env*`],outputs:[`dist/**`],dependsOn:[`^lint`,`^typecheck`,`^test`,`^build`]},format:{dependsOn:[`^format`]},lint:{dependsOn:[`^lint`]},typecheck:{dependsOn:[`^typecheck`]},test:{dependsOn:[`^test`]}}})}function h(){return[`node_modules/`,`dist/`,`coverage/`,`.turbo/`,`*.tsbuildinfo`,``,`.env`,`.env.*`,`!.env.example`,`!.env.example.*`,``,`.DS_Store`,``,`# Yarn 4`,`.pnp.*`,`.yarn/*`,`!.yarn/patches`,`!.yarn/plugins`,`!.yarn/releases`,`!.yarn/sdks`,`!.yarn/versions`,``].join(`
|
|
22
|
-
`)}function g(t,n=process.cwd()){let r=[];for(let i of t){let t=e.resolve(n,i.path);o.mkdirSync(e.dirname(t),{recursive:!0}),o.writeFileSync(t,i.content,`utf-8`),r.push(t)}return r}export{f as createMonorepoRootFiles,d as createRootProjectFiles,p as createWorkspaceFiles,h as renderGitignore,l as
|
|
22
|
+
`)}function g(t,n=process.cwd()){let r=[];for(let i of t){let t=e.resolve(n,i.path);o.mkdirSync(e.dirname(t),{recursive:!0}),o.writeFileSync(t,i.content,`utf-8`),r.push(t)}return r}export{f as createMonorepoRootFiles,d as createRootProjectFiles,p as createWorkspaceFiles,h as renderGitignore,l as renderToolchainConfig,m as renderTurboJson,u as renderWorkspaceTsconfig,g as writeGeneratedFiles};
|