@deltabox/toolchain 0.0.0-stage → 1.0.7

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.
Files changed (235) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/LICENSE +373 -0
  3. package/README.md +235 -2
  4. package/dist/_virtual/_rolldown/runtime.js +1 -0
  5. package/dist/biome.d.ts +4 -0
  6. package/dist/biome.js +1 -0
  7. package/dist/changelog.d.ts +17 -0
  8. package/dist/changelog.js +1 -0
  9. package/dist/cli/commands/index.js +1 -0
  10. package/dist/cli/commands/projects.js +1 -0
  11. package/dist/cli/commands/providers.js +1 -0
  12. package/dist/cli/commands/reset.js +1 -0
  13. package/dist/cli/commands/shared.js +1 -0
  14. package/dist/cli/commands/sync.js +1 -0
  15. package/dist/cli/commands/watch.js +1 -0
  16. package/dist/cli/context.js +1 -0
  17. package/dist/cli/index.d.ts +15 -0
  18. package/dist/cli/index.js +2 -0
  19. package/dist/cli/options.js +1 -0
  20. package/dist/cli/register.d.ts +14 -0
  21. package/dist/cli/register.js +1 -0
  22. package/dist/config.d.ts +18 -0
  23. package/dist/config.js +1 -0
  24. package/dist/core.d.ts +13 -0
  25. package/dist/core.js +1 -0
  26. package/dist/index.d.ts +31 -0
  27. package/dist/index.js +1 -0
  28. package/dist/migrate.d.ts +15 -0
  29. package/dist/migrate.js +1 -0
  30. package/dist/package.js +1 -0
  31. package/dist/packages/biome/src/config.js +1 -0
  32. package/dist/packages/biome/src/index.d.ts +34 -0
  33. package/dist/packages/biome/src/index.js +1 -0
  34. package/dist/packages/biome/src/vscode-settings.js +1 -0
  35. package/dist/packages/changelog/src/cli/index.d.ts +8 -0
  36. package/dist/packages/changelog/src/cli/index.js +1 -0
  37. package/dist/packages/changelog/src/index.d.ts +19 -0
  38. package/dist/packages/changelog/src/index.js +1 -0
  39. package/dist/packages/changelog/src/run-workflows.d.ts +35 -0
  40. package/dist/packages/changelog/src/run-workflows.js +1 -0
  41. package/dist/packages/changelog/src/run.d.ts +14 -0
  42. package/dist/packages/changelog/src/run.js +1 -0
  43. package/dist/packages/changelog/src/sync.d.ts +18 -0
  44. package/dist/packages/changelog/src/sync.js +1 -0
  45. package/dist/packages/changelog/src/templates.d.ts +27 -0
  46. package/dist/packages/changelog/src/templates.js +27 -0
  47. package/dist/packages/changelog/src/utils/args.d.ts +7 -0
  48. package/dist/packages/changelog/src/utils/args.js +1 -0
  49. package/dist/packages/changelog/src/utils/format.d.ts +27 -0
  50. package/dist/packages/changelog/src/utils/format.js +5 -0
  51. package/dist/packages/changelog/src/utils/git.d.ts +9 -0
  52. package/dist/packages/changelog/src/utils/git.js +1 -0
  53. package/dist/packages/changelog/src/utils/packages.js +4 -0
  54. package/dist/packages/changelog/src/utils/reformat.d.ts +9 -0
  55. package/dist/packages/changelog/src/utils/reformat.js +6 -0
  56. package/dist/packages/changelog/src/utils/repo.js +1 -0
  57. package/dist/packages/changelog/src/utils/summary.d.ts +7 -0
  58. package/dist/packages/changelog/src/utils/summary.js +1 -0
  59. package/dist/packages/changelog/src/utils/types.d.ts +58 -0
  60. package/dist/packages/changelog/src/utils/version.d.ts +6 -0
  61. package/dist/packages/changelog/src/utils/version.js +14 -0
  62. package/dist/packages/changelog/src/utils/write.js +1 -0
  63. package/dist/packages/changelog/src/workflows.d.ts +51 -0
  64. package/dist/packages/changelog/src/workflows.js +5 -0
  65. package/dist/packages/config/src/cli/index.d.ts +28 -0
  66. package/dist/packages/config/src/cli/index.js +1 -0
  67. package/dist/packages/config/src/collect.d.ts +19 -0
  68. package/dist/packages/config/src/collect.js +1 -0
  69. package/dist/packages/config/src/config-json.d.ts +33 -0
  70. package/dist/packages/config/src/config-json.js +1 -0
  71. package/dist/packages/config/src/engine.d.ts +56 -0
  72. package/dist/packages/config/src/engine.js +1 -0
  73. package/dist/packages/config/src/env-file.d.ts +33 -0
  74. package/dist/packages/config/src/env-file.js +3 -0
  75. package/dist/packages/config/src/env.d.ts +31 -0
  76. package/dist/packages/config/src/env.js +1 -0
  77. package/dist/packages/config/src/generators/cli.d.ts +78 -0
  78. package/dist/packages/config/src/generators/cli.js +1 -0
  79. package/dist/packages/config/src/generators/env.d.ts +42 -0
  80. package/dist/packages/config/src/generators/env.js +23 -0
  81. package/dist/packages/config/src/generators/index.d.ts +8 -0
  82. package/dist/packages/config/src/generators/index.js +1 -0
  83. package/dist/packages/config/src/generators/json.d.ts +24 -0
  84. package/dist/packages/config/src/generators/json.js +1 -0
  85. package/dist/packages/config/src/generators/markdown.d.ts +77 -0
  86. package/dist/packages/config/src/generators/markdown.js +27 -0
  87. package/dist/packages/config/src/generators/types.d.ts +32 -0
  88. package/dist/packages/config/src/generators/types.js +1 -0
  89. package/dist/packages/config/src/index.d.ts +21 -0
  90. package/dist/packages/config/src/index.js +1 -0
  91. package/dist/packages/config/src/root.d.ts +11 -0
  92. package/dist/packages/config/src/root.js +1 -0
  93. package/dist/packages/config/src/schema.d.ts +34 -0
  94. package/dist/packages/config/src/schema.js +1 -0
  95. package/dist/packages/config/src/types.d.ts +75 -0
  96. package/dist/packages/config/src/types.js +1 -0
  97. package/dist/packages/core/src/graph.d.ts +55 -0
  98. package/dist/packages/core/src/graph.js +1 -0
  99. package/dist/packages/core/src/index.d.ts +16 -0
  100. package/dist/packages/core/src/index.js +1 -0
  101. package/dist/packages/core/src/loader.d.ts +27 -0
  102. package/dist/packages/core/src/loader.js +1 -0
  103. package/dist/packages/core/src/manifest.d.ts +17 -0
  104. package/dist/packages/core/src/manifest.js +1 -0
  105. package/dist/packages/core/src/project-type.d.ts +14 -0
  106. package/dist/packages/core/src/project-type.js +1 -0
  107. package/dist/packages/core/src/reset.d.ts +51 -0
  108. package/dist/packages/core/src/reset.js +1 -0
  109. package/dist/packages/core/src/select.d.ts +32 -0
  110. package/dist/packages/core/src/select.js +1 -0
  111. package/dist/packages/core/src/sync.d.ts +42 -0
  112. package/dist/packages/core/src/sync.js +1 -0
  113. package/dist/packages/core/src/vscode.d.ts +27 -0
  114. package/dist/packages/core/src/vscode.js +1 -0
  115. package/dist/packages/core/src/watch.d.ts +17 -0
  116. package/dist/packages/core/src/watch.js +1 -0
  117. package/dist/packages/migrate/src/biome.d.ts +18 -0
  118. package/dist/packages/migrate/src/biome.js +2 -0
  119. package/dist/packages/migrate/src/check.d.ts +14 -0
  120. package/dist/packages/migrate/src/check.js +1 -0
  121. package/dist/packages/migrate/src/cli/index.d.ts +12 -0
  122. package/dist/packages/migrate/src/cli/index.js +1 -0
  123. package/dist/packages/migrate/src/dprint.d.ts +18 -0
  124. package/dist/packages/migrate/src/dprint.js +1 -0
  125. package/dist/packages/migrate/src/eslint.d.ts +24 -0
  126. package/dist/packages/migrate/src/eslint.js +1 -0
  127. package/dist/packages/migrate/src/index.d.ts +14 -0
  128. package/dist/packages/migrate/src/index.js +1 -0
  129. package/dist/packages/migrate/src/oxfmt-map.d.ts +28 -0
  130. package/dist/packages/migrate/src/oxfmt-map.js +1 -0
  131. package/dist/packages/migrate/src/oxlint-map.d.ts +22 -0
  132. package/dist/packages/migrate/src/oxlint-map.js +1 -0
  133. package/dist/packages/migrate/src/prettier.d.ts +20 -0
  134. package/dist/packages/migrate/src/prettier.js +2 -0
  135. package/dist/packages/migrate/src/registry.d.ts +26 -0
  136. package/dist/packages/migrate/src/registry.js +1 -0
  137. package/dist/packages/migrate/src/types.d.ts +75 -0
  138. package/dist/packages/migrate/src/vite-target.d.ts +31 -0
  139. package/dist/packages/migrate/src/vite-target.js +5 -0
  140. package/dist/packages/project/src/cli/index.d.ts +8 -0
  141. package/dist/packages/project/src/cli/index.js +1 -0
  142. package/dist/packages/project/src/config.d.ts +55 -0
  143. package/dist/packages/project/src/config.js +1 -0
  144. package/dist/packages/project/src/index.d.ts +10 -0
  145. package/dist/packages/project/src/index.js +1 -0
  146. package/dist/packages/project/src/typescript.d.ts +66 -0
  147. package/dist/packages/project/src/typescript.js +22 -0
  148. package/dist/packages/shared/src/config-schema.d.ts +2039 -0
  149. package/dist/packages/shared/src/config-schema.js +1 -0
  150. package/dist/packages/shared/src/fs-utils.d.ts +18 -0
  151. package/dist/packages/shared/src/fs-utils.js +1 -0
  152. package/dist/packages/shared/src/index.d.ts +17 -0
  153. package/dist/packages/shared/src/index.js +1 -0
  154. package/dist/packages/shared/src/object-utils.d.ts +15 -0
  155. package/dist/packages/shared/src/object-utils.js +1 -0
  156. package/dist/packages/shared/src/provider.d.ts +66 -0
  157. package/dist/packages/shared/src/provider.js +1 -0
  158. package/dist/packages/shared/src/run.d.ts +26 -0
  159. package/dist/packages/shared/src/run.js +1 -0
  160. package/dist/packages/shared/src/string-utils.d.ts +52 -0
  161. package/dist/packages/shared/src/string-utils.js +3 -0
  162. package/dist/packages/shared/src/template.d.ts +53 -0
  163. package/dist/packages/shared/src/template.js +1 -0
  164. package/dist/packages/shared/src/toolchain.d.ts +159 -0
  165. package/dist/packages/shared/src/toolchain.js +1 -0
  166. package/dist/packages/shared/src/types.d.ts +100 -0
  167. package/dist/packages/shared/src/yaml.d.ts +17 -0
  168. package/dist/packages/shared/src/yaml.js +5 -0
  169. package/dist/packages/template/src/builtin.d.ts +10 -0
  170. package/dist/packages/template/src/builtin.js +1 -0
  171. package/dist/packages/template/src/cli/index.d.ts +8 -0
  172. package/dist/packages/template/src/cli/index.js +1 -0
  173. package/dist/packages/template/src/index.d.ts +10 -0
  174. package/dist/packages/template/src/index.js +1 -0
  175. package/dist/packages/template/src/local.d.ts +20 -0
  176. package/dist/packages/template/src/local.js +1 -0
  177. package/dist/packages/template/src/online.d.ts +17 -0
  178. package/dist/packages/template/src/online.js +1 -0
  179. package/dist/packages/template/src/registry.d.ts +48 -0
  180. package/dist/packages/template/src/registry.js +1 -0
  181. package/dist/packages/template/src/scaffold.d.ts +25 -0
  182. package/dist/packages/template/src/scaffold.js +1 -0
  183. package/dist/packages/template/src/types.d.ts +59 -0
  184. package/dist/packages/tsconfig/src/cli/generate/index.d.ts +35 -0
  185. package/dist/packages/tsconfig/src/cli/generate/index.js +1 -0
  186. package/dist/packages/tsconfig/src/cli/generate/utils.d.ts +43 -0
  187. package/dist/packages/tsconfig/src/cli/generate/utils.js +1 -0
  188. package/dist/packages/tsconfig/src/cli/index.d.ts +11 -0
  189. package/dist/packages/tsconfig/src/cli/index.js +1 -0
  190. package/dist/packages/tsconfig/src/index.d.ts +10 -0
  191. package/dist/packages/tsconfig/src/index.js +1 -0
  192. package/dist/packages/tsconfig/src/sync.d.ts +15 -0
  193. package/dist/packages/tsconfig/src/sync.js +1 -0
  194. package/dist/packages/tsconfig/src/templates/tsconfig.base.js +1 -0
  195. package/dist/packages/tsconfig/src/templates/tsconfig.build.js +1 -0
  196. package/dist/packages/tsconfig/src/templates/tsconfig.default.js +1 -0
  197. package/dist/packages/tsconfig/src/templates.d.ts +38 -0
  198. package/dist/packages/tsconfig/src/templates.js +1 -0
  199. package/dist/packages/tsdown/src/cleanup.d.ts +17 -0
  200. package/dist/packages/tsdown/src/cleanup.js +1 -0
  201. package/dist/packages/tsdown/src/cli/index.d.ts +11 -0
  202. package/dist/packages/tsdown/src/cli/index.js +1 -0
  203. package/dist/packages/tsdown/src/config/node.d.ts +37 -0
  204. package/dist/packages/tsdown/src/config/node.js +3 -0
  205. package/dist/packages/tsdown/src/index.d.ts +9 -0
  206. package/dist/packages/tsdown/src/index.js +1 -0
  207. package/dist/packages/vite/src/cli/index.d.ts +8 -0
  208. package/dist/packages/vite/src/cli/index.js +1 -0
  209. package/dist/packages/vite/src/commands.d.ts +29 -0
  210. package/dist/packages/vite/src/commands.js +1 -0
  211. package/dist/packages/vite/src/index.d.ts +8 -0
  212. package/dist/packages/vite/src/index.js +1 -0
  213. package/dist/packages/vite/src/provider.d.ts +11 -0
  214. package/dist/packages/vite/src/provider.js +1 -0
  215. package/dist/packages/vite/src/sync.d.ts +25 -0
  216. package/dist/packages/vite/src/sync.js +2 -0
  217. package/dist/packages/vite/src/vp.d.ts +59 -0
  218. package/dist/packages/vite/src/vp.js +1 -0
  219. package/dist/project.d.ts +7 -0
  220. package/dist/project.js +1 -0
  221. package/dist/providers.d.ts +11 -0
  222. package/dist/providers.js +1 -0
  223. package/dist/shared.d.ts +14 -0
  224. package/dist/shared.js +1 -0
  225. package/dist/sync.d.ts +12 -0
  226. package/dist/sync.js +1 -0
  227. package/dist/template.d.ts +11 -0
  228. package/dist/template.js +1 -0
  229. package/dist/tsconfig.d.ts +8 -0
  230. package/dist/tsconfig.js +1 -0
  231. package/dist/tsdown.d.ts +7 -0
  232. package/dist/tsdown.js +1 -0
  233. package/dist/vite.d.ts +9 -0
  234. package/dist/vite.js +1 -0
  235. package/package.json +114 -3
@@ -0,0 +1,28 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { UnmappedItem } from "./types.js";
4
+ //#region packages/migrate/src/oxfmt-map.d.ts
5
+ type Json = Record<string, any>;
6
+ /** Default ignore globs added on top of the migrated negations. */
7
+ export declare const DEFAULT_IGNORE: string[];
8
+ export interface OxfmtMapping {
9
+ oxfmt: Json;
10
+ unmapped: UnmappedItem[];
11
+ }
12
+ /** Map `formatter` + `javascript.formatter` to Oxfmt options. */
13
+ export declare function mapBiomeFormatter(biome: Json): OxfmtMapping;
14
+ /** Turn Biome `files.includes` negations into Oxfmt `ignorePatterns`. */
15
+ export declare function mapBiomeIncludes(biome: Json): string[];
16
+ /**
17
+ * Map `assist.actions.source.organizeImports.options.groups` to Oxfmt
18
+ * `sortImports`. Aliases become `internalPattern`, other literals become
19
+ * `customGroups`, and shorthand selectors map through {@link SELECTOR_MAP}.
20
+ */
21
+ export declare function mapOrganizeImports(groups: unknown): {
22
+ sortImports: Json;
23
+ unmapped: UnmappedItem[];
24
+ };
25
+ /** Build the complete Oxfmt config from a Biome config. */
26
+ export declare function mapBiomeToOxfmt(biome: Json): OxfmtMapping;
27
+ //#endregion
28
+ export {};
@@ -0,0 +1 @@
1
+ import"node:path";import"node:url";import.meta.url;const e=[`**/node_modules/**`,`**/dist/**`,`**/.turbo/**`];function t(e){let t=e.formatter??{},n=e.javascript?.formatter??{},r={},i=[];t.indentStyle&&(r.useTabs=t.indentStyle===`tab`),typeof t.indentWidth==`number`&&(r.tabWidth=t.indentWidth),typeof t.lineWidth==`number`&&(r.printWidth=t.lineWidth),t.lineEnding&&t.lineEnding!==`auto`&&(r.endOfLine=t.lineEnding),typeof t.bracketSameLine==`boolean`&&(r.bracketSameLine=t.bracketSameLine),typeof t.bracketSpacing==`boolean`&&(r.bracketSpacing=t.bracketSpacing),t.attributePosition===`multiline`&&(r.singleAttributePerLine=!0),n.quoteStyle&&(r.singleQuote=n.quoteStyle===`single`),n.jsxQuoteStyle&&(r.jsxSingleQuote=n.jsxQuoteStyle===`single`),n.quoteProperties&&(r.quoteProps=n.quoteProperties===`asNeeded`?`as-needed`:`preserve`),n.trailingCommas&&(r.trailingComma=n.trailingCommas),n.semicolons&&(r.semi=n.semicolons===`always`),n.arrowParentheses&&(r.arrowParens=n.arrowParentheses===`always`?`always`:`avoid`);for(let e of[`expand`,`useEditorconfig`,`formatWithErrors`,`jsxQuoteStyle`])e in t&&i.push({source:`formatter.${e}`,reason:`no Oxfmt equivalent`});return{oxfmt:r,unmapped:i}}function n(t){let n=(t.files?.includes??[]).filter(e=>typeof e==`string`&&e.startsWith(`!`)).map(e=>e.slice(1));return[.../* @__PURE__ */ new Set([...e,...n])]}const r={":NODE:":`builtin`,":BUN:":`builtin`,":PACKAGE:":`external`,":ALIAS:":`internal`,":PATH:":[`parent`,`sibling`,`index`]};function i(e){return/^[@~#][\w-]*\/?/.test(e)||e.endsWith(`/**`)}function a(e){let t=[],n=[],a=[],o=/* @__PURE__ */ new Set([`~/`,`@/`]),s=Array.isArray(e)?e:[];for(let e of s){if(e===`:BLANK_LINE:`)continue;let s=Array.isArray(e)?e:[e],c=[];for(let e of s){if(typeof e!=`string`)continue;if(e in r){let t=r[e];if(!t)continue;for(let e of Array.isArray(t)?t:[t])c.push(e);continue}if(e.startsWith(`:`)){t.push({source:`organizeImports ${e}`,reason:`unknown Biome selector`});continue}if(e.startsWith(`!`)){t.push({source:`organizeImports ${e}`,reason:`negated group members are approximated`});continue}if(i(e)){let t=e.replace(/\*+.*$/,``);t&&o.add(t),c.push(`internal`);continue}let n=`custom${a.length}`;a.push({groupName:n,elementNamePattern:[e]}),c.push(n)}let l=[...new Set(c)];l.length&&n.push(l.length===1?l[0]:l)}let c=[];for(let e of n){let t=c[c.length-1];(t===void 0||JSON.stringify(t)!==JSON.stringify(e))&&c.push(e)}let l={groups:c,internalPattern:[...o],newlinesBetween:!0,sortPackageJson:!1};return a.length&&(l.customGroups=a),{sortImports:l,unmapped:t}}function o(e){let r=t(e),i={...r.oxfmt,ignorePatterns:n(e)},o=[...r.unmapped],s=e.assist?.actions?.source?.organizeImports;if(s){let e=s.options?.groups;if(e){let t=a(e);i.sortImports=t.sortImports,o.push(...t.unmapped)}}return{oxfmt:i,unmapped:o}}export{e as DEFAULT_IGNORE,t as mapBiomeFormatter,n as mapBiomeIncludes,o as mapBiomeToOxfmt,a as mapOrganizeImports};
@@ -0,0 +1,22 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { UnmappedItem } from "./types.js";
4
+ //#region packages/migrate/src/oxlint-map.d.ts
5
+ type Json = Record<string, any>;
6
+ /**
7
+ * Biome rule path -> Oxlint rule name. `null` means "no known equivalent".
8
+ * Bare names are core ESLint rules; prefixed names use an Oxlint plugin.
9
+ */
10
+ export declare const RULE_MAP: Record<string, string | null>;
11
+ export interface OxlintMapping {
12
+ oxlint: Json;
13
+ unmapped: UnmappedItem[];
14
+ }
15
+ /**
16
+ * Build an `.oxlintrc.json` body from a Biome `linter` config. Only rules Biome
17
+ * explicitly configures are translated (so Oxlint's own defaults apply
18
+ * elsewhere), plus the migrated `files.includes` negations as `ignorePatterns`.
19
+ */
20
+ export declare function mapBiomeToOxlint(biome: Json, ignorePatterns: string[]): OxlintMapping;
21
+ //#endregion
22
+ export {};
@@ -0,0 +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 n(e){if(e===`error`)return`error`;if(e===`warn`)return`warn`;if(e===`info`||e===`off`)return`off`}function r(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 i(i,a){let o={},s=[];for(let[a,c]of r(i.linter?.rules??{})){let r=n(t(c));if(!r)continue;let i=e[a];i===void 0?s.push({source:`linter.rules.${a}`,reason:`not in the Biome->Oxlint map`}):i===null?s.push({source:`linter.rules.${a}`,reason:`no Oxlint equivalent`}):o[i]=r}return{oxlint:{$schema:`./node_modules/oxlint/configuration_schema.json`,rules:o,ignorePatterns:a},unmapped:s}}export{e as RULE_MAP,i as mapBiomeToOxlint};
@@ -0,0 +1,20 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { ToolingMigration } from "./types.js";
4
+ //#region packages/migrate/src/prettier.d.ts
5
+ type Json = Record<string, any>;
6
+ /** Locate a Prettier config (JSON files or the `prettier` package.json field). */
7
+ export declare function findPrettierConfig(cwd: string): {
8
+ file: string;
9
+ config: Json;
10
+ } | undefined;
11
+ /** `.prettierignore` globs. */
12
+ export declare function readPrettierIgnore(cwd: string): string[];
13
+ /** Map a Prettier config to Oxfmt options. */
14
+ export declare function mapPrettierToOxfmt(prettier: Json): {
15
+ oxfmt: Json;
16
+ unmapped: string[];
17
+ };
18
+ export declare const prettierToOx: ToolingMigration;
19
+ //#endregion
20
+ export {};
@@ -0,0 +1,2 @@
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-ox`,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-ox: 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};
@@ -0,0 +1,26 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { MigrateTool, MigrationContext, MigrationResult, ToolingMigration } from "./types.js";
4
+ //#region packages/migrate/src/registry.d.ts
5
+ /** Every registered migration. */
6
+ export declare function migrations(): ToolingMigration[];
7
+ /** A migration summary for listings. */
8
+ export interface MigrationInfo {
9
+ id: string;
10
+ from: MigrateTool;
11
+ to: MigrateTool;
12
+ description: string;
13
+ /** Whether the source config is present in the project. */
14
+ detected: boolean;
15
+ }
16
+ /** Describe every migration, flagging which are detected in `cwd`. */
17
+ export declare function listMigrations(cwd: string): MigrationInfo[];
18
+ /** The migrations whose source config is present in `cwd`. */
19
+ export declare function detectMigrations(cwd: string): ToolingMigration[];
20
+ /** Find a migration by id, or by source tool. */
21
+ export declare function findMigration(idOrFrom: string): ToolingMigration | undefined;
22
+ /** Run one migration by id (or source tool name). */
23
+ export declare function runMigration(idOrFrom: string, ctx: MigrationContext): Promise<MigrationResult>;
24
+ /** Run every migration detected in `ctx.cwd`. */
25
+ export declare function runDetectedMigrations(ctx: MigrationContext): Promise<MigrationResult[]>;
26
+ //#endregion
@@ -0,0 +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 i(){return[e,r,t,n]}function a(e){return i().map(t=>({id:t.id,from:t.from,to:t.to,description:t.description,detected:t.detect(e)}))}function o(e){return i().filter(t=>t.detect(e))}function s(e){return i().find(t=>t.id===e||t.from===e)}async function c(e,t){let n=s(e);if(!n)throw Error(`Unknown migration "${e}".`);return n.run(t)}async function l(e){let t=[];for(let n of o(e.cwd))t.push(await n.run(e));return t}export{o as detectMigrations,s as findMigration,a as listMigrations,i as migrations,l as runDetectedMigrations,c as runMigration};
@@ -0,0 +1,75 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ //#region packages/migrate/src/types.d.ts
4
+ /**
5
+ * The migration model.
6
+ *
7
+ * A *migration* converts a project's tooling config from a source tool (Biome,
8
+ * ESLint, Prettier, ...) to a target tool (Oxfmt / Oxlint, ie. "ox"). Migrations
9
+ * are pluggable: registering one here exposes it through the `dbx
10
+ * migrate` CLI, the programmatic API and (over JSON) the VS Code extension.
11
+ */
12
+ /** A tool a migration can read from or write to. */
13
+ export type MigrateTool = 'biome' | 'eslint' | 'prettier' | 'dprint' | 'oxfmt' | 'oxlint' | 'ox';
14
+ /** Where a migration writes its result. */
15
+ export type MigrateTarget = 'files' | 'vite';
16
+ export interface MigrationContext {
17
+ /** The project root. */
18
+ cwd: string;
19
+ /**
20
+ * `files` (default) writes `.oxfmtrc.json` / `.oxlintrc.json`; `vite` is
21
+ * reserved for folding the config into `vite.config.ts`.
22
+ */
23
+ target?: MigrateTarget;
24
+ /** Write the result (default false = dry-run). */
25
+ write?: boolean;
26
+ /** Allow network (eg. npx-based migrators). Default false. */
27
+ online?: boolean;
28
+ }
29
+ /** A field that could not be mapped faithfully. */
30
+ export interface UnmappedItem {
31
+ /** The source key/rule/option. */
32
+ source: string;
33
+ /** Why it could not be mapped. */
34
+ reason: string;
35
+ }
36
+ /** A file a migration produces (or would produce) with its exact content. */
37
+ export interface MigrationFile {
38
+ /** Absolute path. */
39
+ path: string;
40
+ /** The exact file content. */
41
+ content: string;
42
+ }
43
+ export interface MigrationResult {
44
+ id: string;
45
+ from: MigrateTool;
46
+ to: MigrateTool;
47
+ /** Files written, or that would be written (dry-run). */
48
+ written: string[];
49
+ /** The produced files with content (drives `--check`). */
50
+ files?: MigrationFile[];
51
+ /** The oxfmt config produced (present for formatter migrations). */
52
+ oxfmt?: Record<string, unknown>;
53
+ /** The oxlint config produced (present for linter migrations). */
54
+ oxlint?: Record<string, unknown>;
55
+ /** Source items with no target equivalent. */
56
+ unmapped?: UnmappedItem[];
57
+ /** Human-readable notes. */
58
+ notes?: string[];
59
+ }
60
+ /** A pluggable config migration. */
61
+ export interface ToolingMigration {
62
+ /** Stable id, eg. `biome-to-ox`. */
63
+ id: string;
64
+ /** The source tool. */
65
+ from: MigrateTool;
66
+ /** The target tool. */
67
+ to: MigrateTool;
68
+ /** Human-readable description. */
69
+ description: string;
70
+ /** Whether the source config is present in `cwd`. */
71
+ detect: (cwd: string) => boolean;
72
+ /** Run the migration. */
73
+ run: (ctx: MigrationContext) => Promise<MigrationResult>;
74
+ }
75
+ //#endregion
@@ -0,0 +1,31 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { MigrationFile } from "./types.js";
4
+ //#region packages/migrate/src/vite-target.d.ts
5
+ type Json = Record<string, unknown>;
6
+ /** Serialize a JSON-ish value as TypeScript source (single quotes, 4-space). */
7
+ export declare function serializeTs(value: unknown, indent?: number): string;
8
+ /** The index just past the `}`/`]` matching the opening bracket at `open`. */
9
+ export declare function matchBracket(source: string, open: number): number;
10
+ /** The `[valueStart, valueEnd)` range of a top-level `key:` inside an object. */
11
+ export declare function findTopLevelValue(source: string, open: number, close: number, key: string): [number, number] | undefined;
12
+ /**
13
+ * Insert or replace `fmt`/`lint` inside an existing `vite.config.ts`, or render
14
+ * a fresh one when none exists.
15
+ */
16
+ export declare function mergeViteConfig(existing: string | undefined, sections: {
17
+ fmt?: Json;
18
+ lint?: Json;
19
+ }): string;
20
+ /** The merged `vite.config.ts` for `cwd` (path + content), without writing it. */
21
+ export declare function renderViteTarget(cwd: string, sections: {
22
+ fmt?: Json;
23
+ lint?: Json;
24
+ }): MigrationFile;
25
+ /** Write the merged config to `<cwd>/vite.config.ts` and return its path. */
26
+ export declare function writeViteTarget(cwd: string, sections: {
27
+ fmt?: Json;
28
+ lint?: Json;
29
+ }, write: boolean): string;
30
+ //#endregion
31
+ export {};
@@ -0,0 +1,5 @@
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
+ `)},\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
+ `)},\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]!==`,`;)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,s=i.match(/defineConfig\s*\(\s*\{/);if(!s||s.index===void 0)return i;for(let[e,t]of n){let n=i.match(/defineConfig\s*\(\s*\{/);if(!n||n.index===void 0)break;let s=i.indexOf(`{`,n.index),c=a(i,s);if(c===-1)break;let l=r(t,1),u=o(i,s,c,e);i=u?`${i.slice(0,u[0])}${l}${i.slice(u[1])}`:`${i.slice(0,s+1)}\n ${e}: ${l},${i.slice(s+1)}`}return i}function c(n,r){let i=e.join(n,`vite.config.ts`);return{path:i,content:s(t.existsSync(i)?t.readFileSync(i,`utf-8`):void 0,r)}}function l(e,n,r){let i=c(e,n);return r&&t.writeFileSync(i.path,i.content,`utf-8`),i.path}export{o as findTopLevelValue,a as matchBracket,s as mergeViteConfig,c as renderViteTarget,r as serializeTs,l as writeViteTarget};
@@ -0,0 +1,8 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { ToolingCommand } from "../../../shared/src/types.js";
4
+ import "../../../shared/src/index.js";
5
+ //#region packages/project/src/cli/index.d.ts
6
+ /** Build the project scaffolding commands. */
7
+ export declare function projectCommands(): ToolingCommand[];
8
+ //#endregion
@@ -0,0 +1 @@
1
+ import"node:path";import"node:url";import.meta.url;import{createMonorepoRootFiles as e,createRootProjectFiles as t,createWorkspaceFiles as n,writeGeneratedFiles as r}from"../typescript.js";import{generateProjectConfigs as i}from"../config.js";const a=[{flags:`--no-config`,description:`Skip the dbx.config.ts file.`},{flags:`--type <type>`,description:`Project type: project | monorepo-root | monorepo-workspace.`}];function o(){return[{name:`project:init`,description:`Scaffold a single-package TypeScript project.`,options:[{flags:`-n, --name <name>`,description:`Project name.`},{flags:`-s, --scope <scope>`,description:`npm scope, eg. @acme.`},{flags:`-o, --out <dir>`,description:`Output directory (default: cwd).`},...a],run:(e,n)=>{let i=String(e.name??n.config.project?.name??`app`),a=t({name:i,...e.scope?{scope:e.scope}:{},type:e.type??`project`,includeConfig:e.config??!0}),o=r(a,e.out??n.cwd);for(let e of o)console.log(`Created ${e}`)}},{name:`project:init:monorepo`,description:`Scaffold a monorepo root + one example workspace.`,options:[{flags:`-n, --name <name>`,description:`Project name.`},{flags:`-s, --scope <scope>`,description:`npm scope, eg. @acme.`},{flags:`-o, --out <dir>`,description:`Output directory (default: cwd).`},...a],run:(t,i)=>{let a=String(t.name??i.config.project?.name??`monorepo`),o=t.scope??i.config.project?.scope??`@${a}`,s=t.out??i.cwd,c=t.config??!0,l=t.type??`monorepo-root`,u=e({name:a,scope:o,type:l,includeConfig:c,workspaces:[{alias:`core`,dir:`packages/core`}]});u.push(...n({name:a,scope:o,wsName:`core`,wsDir:`packages/core`,type:`monorepo-workspace`,includeConfig:c}).map(e=>({...e,path:`packages/core/${e.path}`})));let d=r(u,s);for(let e of d)console.log(`Created ${e}`)}},{name:`project:init:workspace`,description:`Scaffold a monorepo workspace package into an existing monorepo root.`,options:[{flags:`-n, --name <name>`,description:`Workspace package name (unscoped).`},{flags:`-s, --scope <scope>`,description:`npm scope, eg. @acme.`},{flags:`-r, --root <dir>`,description:`Monorepo root (default: cwd).`},{flags:`-d, --dir <dir>`,description:`Workspace dir relative to the root (default: packages/<name>).`},...a],run:(e,t)=>{let i=e.root??t.cwd,a=String(e.name??`workspace`),o=e.scope??t.config.project?.scope??`@${a}`,s=(e.dir??`packages/${a}`).replace(/\\/g,`/`).replace(/\/+$/,``),c=e.config??!0,l=e.type??`monorepo-workspace`,u=n({name:a,scope:o,wsName:a,wsDir:s,type:l,includeConfig:c}).map(e=>({...e,path:`${s}/${e.path}`})),d=r(u,i);for(let e of d)console.log(`Created ${e}`)}},{name:`project:config`,description:`Generate dbx.config.ts for existing projects that are missing one.`,options:[{flags:`--cwd <dir>`,description:`Root to scan (default: cwd).`},{flags:`--include <pattern...>`,description:`Only projects matching these patterns (glob or substring).`},{flags:`--exclude <pattern...>`,description:`Skip projects matching these patterns (glob or substring).`},{flags:`--type <type>`,description:`Force a project type for every config.`},{flags:`--force`,description:`Overwrite configs that already exist.`},{flags:`--dry-run`,description:`Report what would be written without writing.`},{flags:`--json`,description:`Print the result as JSON.`}],run:(e,t)=>{let n=e.cwd??t.cwd,r=i({root:n,...e.include?{include:e.include}:{},...e.exclude?{exclude:e.exclude}:{},...e.type?{type:e.type}:{},force:!!e.force,dryRun:!!e.dryRun});if(e.json){console.log(JSON.stringify(r,null,4));return}let a=r.dryRun?`would create`:`created`;console.log(`dbx: ${a} ${r.created.length} config(s), skipped ${r.skipped.length}.`);for(let e of r.configs)e.created&&console.log(` + ${e.rel===`.`?`dbx.config.ts`:`${e.rel}/dbx.config.ts`} [${e.type}]`)}}]}export{o as projectCommands};
@@ -0,0 +1,55 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { ProjectType } from "../../shared/src/config-schema.js";
4
+ import "../../shared/src/index.js";
5
+ //#region packages/project/src/config.d.ts
6
+ /** The file name a generated dbx config uses. */
7
+ export declare const GENERATED_CONFIG_FILENAME = "dbx.config.ts";
8
+ export interface GenerateProjectConfigsOptions {
9
+ /** Root to scan for projects. */
10
+ root: string;
11
+ /** Keep only projects matching one of these patterns (glob or substring). */
12
+ include?: string[];
13
+ /** Drop projects matching any of these patterns (glob or substring). */
14
+ exclude?: string[];
15
+ /** Force a project type instead of detecting it. */
16
+ type?: ProjectType;
17
+ /** Overwrite existing config files (default: skip projects that have one). */
18
+ force?: boolean;
19
+ /** Maximum directory depth to scan (default 5). */
20
+ maxDepth?: number;
21
+ /** Report what would be written without writing anything. */
22
+ dryRun?: boolean;
23
+ }
24
+ /** One project considered for config generation. */
25
+ export interface GeneratedProjectConfig {
26
+ /** Absolute project directory. */
27
+ dir: string;
28
+ /** Directory relative to the root (posix). */
29
+ rel: string;
30
+ /** Package name when available. */
31
+ name?: string;
32
+ /** The resolved project type. */
33
+ type: ProjectType;
34
+ /** The config file path (absolute). */
35
+ configPath: string;
36
+ /** Whether the config was (or would be) written. */
37
+ created: boolean;
38
+ /** Why the project was skipped, when it was. */
39
+ skipped?: string;
40
+ }
41
+ export interface GenerateProjectConfigsResult {
42
+ configs: GeneratedProjectConfig[];
43
+ /** Project dirs whose config was (or would be) written. */
44
+ created: string[];
45
+ /** Project dirs skipped (already have a config). */
46
+ skipped: string[];
47
+ dryRun: boolean;
48
+ }
49
+ /**
50
+ * Generate a `dbx.config.ts` for every discovered project that is missing one
51
+ * (unless `force`). The project type is detected from the filesystem unless
52
+ * overridden. Returns the configs written (or that would be).
53
+ */
54
+ export declare function generateProjectConfigs(options: GenerateProjectConfigsOptions): GenerateProjectConfigsResult;
55
+ //#endregion
@@ -0,0 +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{renderToolingConfig 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};
@@ -0,0 +1,10 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { projectCommands } from "./cli/index.js";
4
+ import { GENERATED_CONFIG_FILENAME, GenerateProjectConfigsOptions, GenerateProjectConfigsResult, GeneratedProjectConfig, generateProjectConfigs } from "./config.js";
5
+ import { MonorepoRootContext, ProjectContext, WorkspaceContext, createMonorepoRootFiles, createRootProjectFiles, createWorkspaceFiles, renderGitignore, renderToolingConfig, renderTurboJson, renderWorkspaceTsconfig, writeGeneratedFiles } from "./typescript.js";
6
+ declare namespace index_d_exports {
7
+ export { GENERATED_CONFIG_FILENAME, GenerateProjectConfigsOptions, GenerateProjectConfigsResult, GeneratedProjectConfig, MonorepoRootContext, ProjectContext, WorkspaceContext, createMonorepoRootFiles, createRootProjectFiles, createWorkspaceFiles, generateProjectConfigs, projectCommands, renderGitignore, renderToolingConfig, renderTurboJson, renderWorkspaceTsconfig, writeGeneratedFiles };
8
+ }
9
+ //#endregion
10
+ export { GENERATED_CONFIG_FILENAME, GenerateProjectConfigsOptions, GenerateProjectConfigsResult, GeneratedProjectConfig, MonorepoRootContext, ProjectContext, WorkspaceContext, createMonorepoRootFiles, createRootProjectFiles, createWorkspaceFiles, generateProjectConfigs, index_d_exports, projectCommands, renderGitignore, renderToolingConfig, renderTurboJson, renderWorkspaceTsconfig, writeGeneratedFiles };
@@ -0,0 +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,renderToolingConfig 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,renderToolingConfig:()=>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 renderToolingConfig,o as renderTurboJson,s as renderWorkspaceTsconfig,f as src_exports,c as writeGeneratedFiles};
@@ -0,0 +1,66 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { ProjectType } from "../../shared/src/config-schema.js";
4
+ import { GeneratedFile } from "../../shared/src/types.js";
5
+ import "../../shared/src/index.js";
6
+ import { MonorepoWorkspace } from "../../tsconfig/src/templates.js";
7
+ import "../../tsconfig/src/index.js";
8
+ //#region packages/project/src/typescript.d.ts
9
+ /** The replacement values a project scaffold understands. */
10
+ export interface ProjectContext {
11
+ /** The project/package name (unscoped). */
12
+ name: string;
13
+ /** The npm scope, eg. `@acme`. */
14
+ scope?: string;
15
+ /** Package author. */
16
+ author?: string;
17
+ /** SPDX license id. */
18
+ license?: string;
19
+ /** Repository URL. */
20
+ repoUrl?: string;
21
+ /** Node engine range. */
22
+ nodeVersion?: string;
23
+ /** Yarn version. */
24
+ yarnVersion?: string;
25
+ /** Package manager name. */
26
+ packageManager?: string;
27
+ /** The project kind written into the scaffolded `dbx.config.ts`. */
28
+ type?: ProjectType;
29
+ /** Write a `dbx.config.ts` (default true). */
30
+ includeConfig?: boolean;
31
+ }
32
+ /**
33
+ * Render a `dbx.config.ts` scaffold (toolchain settings under `toolchain`). The
34
+ * `project.type` lets the sync know whether the folder is a monorepo root, a
35
+ * workspace, or a single project.
36
+ */
37
+ export declare function renderToolingConfig(ctx: ProjectContext & {
38
+ type: ProjectType;
39
+ }): string;
40
+ /** A minimal tsconfig.json that extends the default template. */
41
+ export declare function renderWorkspaceTsconfig(composite?: boolean): string;
42
+ /** Files for a single-package TypeScript project (tsconfig + tooling). */
43
+ export declare function createRootProjectFiles(ctx: ProjectContext): GeneratedFile[];
44
+ export interface MonorepoRootContext extends ProjectContext {
45
+ /** The workspaces to wire into the monorepo tsconfig. */
46
+ workspaces: MonorepoWorkspace[];
47
+ /** The workspace globs (default `['packages/*']`). */
48
+ workspaceGlobs?: string[];
49
+ }
50
+ /** Files for a monorepo root (workspaces + turbo + monorepo tsconfig). */
51
+ export declare function createMonorepoRootFiles(ctx: MonorepoRootContext): GeneratedFile[];
52
+ export interface WorkspaceContext extends ProjectContext {
53
+ /** The workspace name (unscoped), eg. `core`. */
54
+ wsName: string;
55
+ /** The workspace directory relative to the root, eg. `packages/core`. */
56
+ wsDir: string;
57
+ }
58
+ /** Files for a monorepo workspace package. */
59
+ export declare function createWorkspaceFiles(ctx: WorkspaceContext): GeneratedFile[];
60
+ /** The default monorepo turbo pipeline. */
61
+ export declare function renderTurboJson(): string;
62
+ /** A generic `.gitignore`. */
63
+ export declare function renderGitignore(): string;
64
+ /** Write generated files under `cwd`, creating directories as needed. */
65
+ export declare function writeGeneratedFiles(files: GeneratedFile[], cwd?: string): string[];
66
+ //#endregion
@@ -0,0 +1,22 @@
1
+ import{default as e}from"node:path";import"node:url";import.meta.url;import{renderBiomeJson as t}from"../../biome/src/index.js";import{renderMonorepoTsconfig as n,renderTsconfigBase as r,renderTsconfigBuild as i,renderTsconfigDefault as a}from"../../tsconfig/src/templates.js";import"../../tsconfig/src/index.js";import o from"node:fs";function s(e){return{...e}}const c=(e,t=4)=>`${JSON.stringify(e,null,t)}\n`;function l(e){let t=[[`type`,e.type],[`name`,e.name]];e.scope&&t.push([`scope`,e.scope]),e.author&&t.push([`author`,e.author]),e.license&&t.push([`license`,e.license]),e.repoUrl&&t.push([`repo`,e.repoUrl]),t.push([`nodeVersion`,e.nodeVersion??`22`]),t.push([`packageManager`,e.packageManager??`yarn`]),e.yarnVersion&&t.push([`packageManagerVersion`,e.yarnVersion]);let n=t.map(([e,t])=>` ${e}: ${JSON.stringify(t)},`).join(`
2
+ `),r=[];return(e.type===`monorepo-root`||e.type===`project`)&&r.push(` changelog: true,`),r.push(` biome: true,`),e.type===`monorepo-root`&&r.push(` tsconfig: true,`),r.push(` watch: true,`),`import { defineConfig } from '@deltabox/toolchain';
3
+
4
+ export default defineConfig({
5
+ toolchain: {
6
+ project: {
7
+ ${n}
8
+ },
9
+ ${r.join(`
10
+ `)}
11
+ },
12
+ });
13
+ `}function u(e=!1){return c({extends:`./tsconfig.default.json`,compilerOptions:{composite:e}})}function d(e){let n={name:e.scope?`${e.scope}/${e.name}`:e.name,version:`0.1.0`,private:!0,type:`module`,description:``,...e.author?{author:e.author}:{},...e.license?{license:e.license}:{},scripts:{build:`tsdown --config-loader unrun`,format:`biome format --write .`,lint:`biome check --fix .`,test:`vitest run`,typecheck:`tsc -p tsconfig.json --noEmit`},devDependencies:{"@biomejs/biome":`catalog:`,tsdown:`catalog:`,typescript:`catalog:`,vitest:`catalog:`},...e.packageManager?{packageManager:e.packageManager}:{},engines:{node:e.nodeVersion?`>=${e.nodeVersion}`:`>=22`}};return[...e.includeConfig===!1?[]:[{path:`dbx.config.ts`,content:l({...e,type:e.type??`project`})}],{path:`package.json`,content:c(n)},{path:`tsconfig.base.json`,content:r(s(e))},{path:`tsconfig.default.json`,content:a(s(e))},{path:`tsconfig.build.json`,content:i(s(e))},{path:`tsconfig.json`,content:u()},{path:`biome.json`,content:t(s(e))},{path:`.gitignore`,content:h()},{path:`README.md`,content:`# ${e.name}\n`}]}function f(e){let i={name:e.name,version:`0.1.0`,private:!0,type:`module`,...e.author?{author:e.author}:{},...e.license?{license:e.license}:{},scripts:{build:`turbo build`,format:`turbo format`,lint:`turbo lint`,test:`turbo test`,typecheck:`turbo typecheck`},workspaces:e.workspaceGlobs??[`packages/*`],devDependencies:{"@biomejs/biome":`catalog:`,tsdown:`catalog:`,turbo:`^2.11.2`,typescript:`catalog:`,vitest:`catalog:`},...e.packageManager?{packageManager:e.packageManager}:{},engines:{node:e.nodeVersion?`>=${e.nodeVersion}`:`>=22`}};return[...e.includeConfig===!1?[]:[{path:`dbx.config.ts`,content:l({...e,type:e.type??`monorepo-root`})}],{path:`package.json`,content:c(i)},{path:`turbo.json`,content:m()},{path:`tsconfig.base.json`,content:r(s(e))},{path:`tsconfig.monorepo.json`,content:n({scope:e.scope??e.name,workspaces:e.workspaces})},{path:`biome.json`,content:t(s(e))},{path:`.gitignore`,content:h()},{path:`README.md`,content:`# ${e.name}\n`}]}function p(e){let t={name:e.scope?`${e.scope}/${e.wsName}`:e.wsName,version:`0.1.0`,type:`module`,files:[`dist`],scripts:{build:`tsdown --config-loader unrun`,format:`biome format --write .`,lint:`biome check --fix .`,test:`vitest run`,typecheck:`tsc -p tsconfig.build.json --noEmit`},publishConfig:{access:`public`,provenance:!0}},n=e.wsDir.split(`/`).length;return[...e.includeConfig===!1?[]:[{path:`dbx.config.ts`,content:l({...e,type:e.type??`monorepo-workspace`})}],{path:`package.json`,content:c(t)},{path:`tsconfig.default.json`,content:c({extends:`${`../`.repeat(n)}tsconfig.base.json`,compilerOptions:{module:`NodeNext`,moduleResolution:`NodeNext`,types:[`node`]},include:[`src`,`tests`,`tsdown.config.ts`,`vitest.config.ts`]})},{path:`tsconfig.build.json`,content:u()},{path:`tsconfig.json`,content:u()},{path:`tsdown.config.ts`,content:`import { defineConfig } from 'tsdown';
14
+
15
+ import { baseTsdownConfig } from '@deltabox/toolchain-tsdown';
16
+
17
+ export default defineConfig({
18
+ ...baseTsdownConfig,
19
+ entry: { index: 'src/index.ts' },
20
+ });
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 renderToolingConfig,m as renderTurboJson,u as renderWorkspaceTsconfig,g as writeGeneratedFiles};