@open-agent-toolkit/cli 0.1.26 → 0.1.28
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/assets/docs/cli-utilities/tool-packs.md +6 -5
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-docs-bootstrap/SKILL.md +59 -82
- package/assets/templates/docs-app-fuma/app/[[...slug]]/page.tsx +16 -2
- package/assets/templates/docs-app-fuma/app/layout.tsx +6 -5
- package/assets/templates/docs-app-fuma/components/search.tsx +46 -0
- package/assets/templates/docs-app-fuma/docs/contributing.md +4 -4
- package/assets/templates/docs-app-fuma/docs/getting-started.md +4 -4
- package/assets/templates/docs-app-fuma/docs/index.md +0 -2
- package/assets/templates/docs-app-fuma/next.config.js +0 -2
- package/assets/templates/docs-app-fuma/package.json.template +1 -1
- package/assets/templates/docs-app-mkdocs/package.json.template +1 -1
- package/dist/commands/docs/init/docs-commands.d.ts +8 -0
- package/dist/commands/docs/init/docs-commands.d.ts.map +1 -0
- package/dist/commands/docs/init/docs-commands.js +25 -0
- package/dist/commands/docs/init/index.d.ts.map +1 -1
- package/dist/commands/docs/init/index.js +8 -7
- package/dist/commands/docs/init/resolve-options.d.ts +7 -2
- package/dist/commands/docs/init/resolve-options.d.ts.map +1 -1
- package/dist/commands/docs/init/resolve-options.js +34 -2
- package/dist/commands/docs/init/scaffold.d.ts +8 -1
- package/dist/commands/docs/init/scaffold.d.ts.map +1 -1
- package/dist/commands/docs/init/scaffold.js +75 -13
- package/dist/commands/init/tools/index.d.ts +10 -0
- package/dist/commands/init/tools/index.d.ts.map +1 -1
- package/dist/commands/init/tools/index.js +239 -81
- package/package.json +2 -2
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DocsRepoShape } from './resolve-options.js';
|
|
2
|
+
export interface DocsCommands {
|
|
3
|
+
install: string;
|
|
4
|
+
dev: string;
|
|
5
|
+
build: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function buildDocsCommands(repoShape: DocsRepoShape, targetDir: string, appName: string): DocsCommands;
|
|
8
|
+
//# sourceMappingURL=docs-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-commands.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/init/docs-commands.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,YAAY,CAsBd"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { normalize } from 'node:path';
|
|
2
|
+
function isRootTarget(targetDir) {
|
|
3
|
+
return targetDir.trim() === '' || normalize(targetDir) === '.';
|
|
4
|
+
}
|
|
5
|
+
export function buildDocsCommands(repoShape, targetDir, appName) {
|
|
6
|
+
if (repoShape === 'monorepo') {
|
|
7
|
+
return {
|
|
8
|
+
install: 'pnpm install',
|
|
9
|
+
dev: `pnpm --filter ${appName} dev`,
|
|
10
|
+
build: `pnpm --filter ${appName} build`,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
if (isRootTarget(targetDir)) {
|
|
14
|
+
return {
|
|
15
|
+
install: 'pnpm install',
|
|
16
|
+
dev: 'pnpm dev',
|
|
17
|
+
build: 'pnpm build',
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
install: `cd ${targetDir} && pnpm install`,
|
|
22
|
+
dev: `cd ${targetDir} && pnpm dev`,
|
|
23
|
+
build: `cd ${targetDir} && pnpm build`,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,YAAY,EAElB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,KAAK,SAAS,EAGf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,YAAY,EAElB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,KAAK,SAAS,EAGf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAG5C,OAAO,EAIL,KAAK,uBAAuB,EAK7B,MAAM,mBAAmB,CAAC;AAmB3B,UAAU,oBAAoB;IAC5B,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,gBAAgB,CAAC,CAAC;IAC9E,gBAAgB,EAAE,CAChB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,aAAa,KACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5B,eAAe,EAAE,CAAC,CAAC,SAAS,MAAM,EAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAC1B,GAAG,EAAE,aAAa,KACf,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,WAAW,EAAE,CACX,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,uBAAuB,EAChC,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,qBAAqB,EAAE,CACrB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClC,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1E;AAyGD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAc7E;AAoHD,wBAAgB,qBAAqB,CACnC,SAAS,GAAE,OAAO,CAAC,oBAAoB,CAAM,GAC5C,OAAO,CA6CT"}
|
|
@@ -5,6 +5,7 @@ import { readGlobalOptions } from '../../shared/shared.utils.js';
|
|
|
5
5
|
import { readOatConfig, writeOatConfig, } from '../../../config/oat-config.js';
|
|
6
6
|
import { resolveAssetsRoot } from '../../../fs/assets.js';
|
|
7
7
|
import { Command, Option } from 'commander';
|
|
8
|
+
import { buildDocsCommands } from './docs-commands.js';
|
|
8
9
|
import { DEFAULT_DOCS_REPO_SHAPE_DEPENDENCIES, detectDocsRepoShape, getDefaultDocsAppName, resolveDocsInitOptions, } from './resolve-options.js';
|
|
9
10
|
import { patchRootPackageJson, } from './root-package.js';
|
|
10
11
|
import { scaffoldDocsApp } from './scaffold.js';
|
|
@@ -115,6 +116,7 @@ async function runDocsInitCommand(context, options, dependencies) {
|
|
|
115
116
|
acceptDefaults: options.yes ?? false,
|
|
116
117
|
providedFramework: options.framework,
|
|
117
118
|
providedAppName: options.appName,
|
|
119
|
+
providedSiteName: options.siteName,
|
|
118
120
|
providedTargetDir: options.targetDir,
|
|
119
121
|
providedSiteDescription: options.description,
|
|
120
122
|
providedLint: options.lint,
|
|
@@ -166,13 +168,11 @@ async function runDocsInitCommand(context, options, dependencies) {
|
|
|
166
168
|
if (!context.json) {
|
|
167
169
|
context.logger.info('');
|
|
168
170
|
context.logger.info('Next steps:');
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
context.logger.info(' pnpm install');
|
|
175
|
-
context.logger.info(` pnpm --filter ${resolved.appName} build`);
|
|
171
|
+
const commands = buildDocsCommands(resolved.repoShape, resolved.targetDir, resolved.appName);
|
|
172
|
+
context.logger.info(` ${commands.install}`);
|
|
173
|
+
context.logger.info(` ${commands.dev}`);
|
|
174
|
+
context.logger.info(` ${commands.build}`);
|
|
175
|
+
if (resolved.repoShape === 'monorepo') {
|
|
176
176
|
const defaultName = getDefaultDocsAppName(context.cwd, resolved.repoShape);
|
|
177
177
|
if (resolved.appName !== defaultName) {
|
|
178
178
|
context.logger.info('');
|
|
@@ -205,6 +205,7 @@ export function createDocsInitCommand(overrides = {}) {
|
|
|
205
205
|
'mkdocs',
|
|
206
206
|
]))
|
|
207
207
|
.addOption(new Option('--app-name <name>', 'Docs app name'))
|
|
208
|
+
.addOption(new Option('--site-name <name>', 'Display title (distinct from --app-name)'))
|
|
208
209
|
.addOption(new Option('--target-dir <path>', 'Target directory for the docs app'))
|
|
209
210
|
.addOption(new Option('--description <text>', 'Site description'))
|
|
210
211
|
.addOption(new Option('--lint <mode>', 'Markdown lint mode').choices([
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { PromptContext, SelectChoice } from '../../shared/shared.prompts.js';
|
|
2
|
-
export type DocsRepoShape = 'monorepo' | 'single-package';
|
|
2
|
+
export type DocsRepoShape = 'monorepo' | 'single-package' | 'nested-standalone';
|
|
3
|
+
export type DocsDetectedRepoShape = Exclude<DocsRepoShape, 'nested-standalone'>;
|
|
3
4
|
export type DocsFramework = 'fumadocs' | 'mkdocs';
|
|
4
5
|
export type DocsLintMode = 'none' | 'markdownlint-cli2';
|
|
5
6
|
export type DocsFormatMode = 'oxfmt' | 'none';
|
|
@@ -8,6 +9,7 @@ export interface DocsInitResolvedOptions {
|
|
|
8
9
|
repoShape: DocsRepoShape;
|
|
9
10
|
framework: DocsFramework;
|
|
10
11
|
appName: string;
|
|
12
|
+
siteName: string;
|
|
11
13
|
targetDir: string;
|
|
12
14
|
siteDescription: string;
|
|
13
15
|
lint: DocsLintMode;
|
|
@@ -21,6 +23,7 @@ export interface ResolveDocsInitOptionsInput {
|
|
|
21
23
|
acceptDefaults: boolean;
|
|
22
24
|
providedFramework?: DocsFramework;
|
|
23
25
|
providedAppName?: string;
|
|
26
|
+
providedSiteName?: string;
|
|
24
27
|
providedTargetDir?: string;
|
|
25
28
|
providedSiteDescription?: string;
|
|
26
29
|
providedLint?: DocsLintMode;
|
|
@@ -36,8 +39,10 @@ export interface DocsRepoShapeDependencies {
|
|
|
36
39
|
}
|
|
37
40
|
export declare function getDefaultDocsAppName(repoRoot: string, repoShape: DocsRepoShape): string;
|
|
38
41
|
export declare function getDefaultDocsTargetDir(repoShape: DocsRepoShape, appName: string): string;
|
|
39
|
-
export declare function
|
|
42
|
+
export declare function humanizeAppName(appName: string): string;
|
|
43
|
+
export declare function detectDocsRepoShape(repoRoot: string, dependencies: DocsRepoShapeDependencies): Promise<DocsDetectedRepoShape>;
|
|
40
44
|
export declare function getTemplateDir(framework: DocsFramework): string;
|
|
45
|
+
export declare function resolveEffectiveDocsShape(repoShape: DocsRepoShape, framework: DocsFramework, repoRoot: string, targetDir: string): DocsRepoShape;
|
|
41
46
|
export declare function resolveDocsInitOptions(input: ResolveDocsInitOptionsInput): Promise<DocsInitResolvedOptions | null>;
|
|
42
47
|
export declare const DEFAULT_DOCS_REPO_SHAPE_DEPENDENCIES: DocsRepoShapeDependencies;
|
|
43
48
|
//# sourceMappingURL=resolve-options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-options.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/init/resolve-options.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACb,MAAM,iCAAiC,CAAC;AAGzC,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve-options.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/init/resolve-options.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { basename, join } from 'node:path';
|
|
1
|
+
import { basename, isAbsolute, join, relative, resolve } from 'node:path';
|
|
2
2
|
import { dirExists, fileExists } from '../../../fs/io.js';
|
|
3
3
|
const FRAMEWORK_CHOICES = [
|
|
4
4
|
{ label: 'Fumadocs (Next.js + MDX, static export)', value: 'fumadocs' },
|
|
@@ -24,6 +24,13 @@ export function getDefaultDocsTargetDir(repoShape, appName) {
|
|
|
24
24
|
}
|
|
25
25
|
return appName;
|
|
26
26
|
}
|
|
27
|
+
export function humanizeAppName(appName) {
|
|
28
|
+
return appName
|
|
29
|
+
.split(/[-_]/g)
|
|
30
|
+
.filter(Boolean)
|
|
31
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
32
|
+
.join(' ');
|
|
33
|
+
}
|
|
27
34
|
function hasWorkspaceConfig(rawPackageJson) {
|
|
28
35
|
try {
|
|
29
36
|
const parsed = JSON.parse(rawPackageJson);
|
|
@@ -57,6 +64,21 @@ export async function detectDocsRepoShape(repoRoot, dependencies) {
|
|
|
57
64
|
export function getTemplateDir(framework) {
|
|
58
65
|
return framework === 'fumadocs' ? 'docs-app-fuma' : 'docs-app-mkdocs';
|
|
59
66
|
}
|
|
67
|
+
export function resolveEffectiveDocsShape(repoShape, framework, repoRoot, targetDir) {
|
|
68
|
+
if (repoShape !== 'single-package' || framework !== 'fumadocs') {
|
|
69
|
+
return repoShape;
|
|
70
|
+
}
|
|
71
|
+
if (!targetDir.trim()) {
|
|
72
|
+
return repoShape;
|
|
73
|
+
}
|
|
74
|
+
const targetPath = resolve(repoRoot, targetDir);
|
|
75
|
+
const relativeTarget = relative(resolve(repoRoot), targetPath);
|
|
76
|
+
const isRepoSubdirectory = relativeTarget !== '' &&
|
|
77
|
+
relativeTarget !== '.' &&
|
|
78
|
+
!relativeTarget.startsWith('..') &&
|
|
79
|
+
!isAbsolute(relativeTarget);
|
|
80
|
+
return isRepoSubdirectory ? 'nested-standalone' : repoShape;
|
|
81
|
+
}
|
|
60
82
|
export async function resolveDocsInitOptions(input) {
|
|
61
83
|
const ctx = { interactive: input.interactive };
|
|
62
84
|
const framework = input.providedFramework ||
|
|
@@ -74,6 +96,14 @@ export async function resolveDocsInitOptions(input) {
|
|
|
74
96
|
if (!appName) {
|
|
75
97
|
return null;
|
|
76
98
|
}
|
|
99
|
+
const defaultSiteName = humanizeAppName(appName);
|
|
100
|
+
const siteName = input.providedSiteName ??
|
|
101
|
+
(input.interactive && !input.acceptDefaults
|
|
102
|
+
? await input.inputWithDefault('Site name', defaultSiteName, ctx)
|
|
103
|
+
: defaultSiteName);
|
|
104
|
+
if (siteName === null) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
77
107
|
const defaultTargetDir = getDefaultDocsTargetDir(input.repoShape, appName);
|
|
78
108
|
const targetDir = input.providedTargetDir?.trim() ||
|
|
79
109
|
(input.interactive && !input.acceptDefaults
|
|
@@ -100,11 +130,13 @@ export async function resolveDocsInitOptions(input) {
|
|
|
100
130
|
if (!format) {
|
|
101
131
|
return null;
|
|
102
132
|
}
|
|
133
|
+
const repoShape = resolveEffectiveDocsShape(input.repoShape, framework, input.repoRoot, targetDir);
|
|
103
134
|
return {
|
|
104
135
|
repoRoot: input.repoRoot,
|
|
105
|
-
repoShape
|
|
136
|
+
repoShape,
|
|
106
137
|
framework,
|
|
107
138
|
appName,
|
|
139
|
+
siteName,
|
|
108
140
|
targetDir,
|
|
109
141
|
siteDescription,
|
|
110
142
|
lint,
|
|
@@ -13,7 +13,14 @@ export interface OatDepContext {
|
|
|
13
13
|
localPackages: Set<string>;
|
|
14
14
|
oatPackageVersions: Record<string, string>;
|
|
15
15
|
}
|
|
16
|
+
type MaybePromise<T> = T | Promise<T>;
|
|
17
|
+
export interface ScaffoldDocsAppDependencies {
|
|
18
|
+
detectPnpmVersion: () => MaybePromise<string | null | undefined>;
|
|
19
|
+
hasInheritedPackageManager: (repoRoot: string, appRoot: string) => MaybePromise<boolean>;
|
|
20
|
+
}
|
|
21
|
+
export declare const PNPM_FALLBACK = "10.13.1";
|
|
16
22
|
export declare function detectIsOatRepo(repoRoot: string): Promise<boolean>;
|
|
17
23
|
export declare function resolveOatDepContext(repoRoot: string, assetsRoot: string): Promise<OatDepContext>;
|
|
18
|
-
export declare function scaffoldDocsApp(options: ScaffoldDocsAppOptions): Promise<ScaffoldDocsAppResult>;
|
|
24
|
+
export declare function scaffoldDocsApp(options: ScaffoldDocsAppOptions, overrides?: Partial<ScaffoldDocsAppDependencies>): Promise<ScaffoldDocsAppResult>;
|
|
25
|
+
export {};
|
|
19
26
|
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/init/scaffold.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../../src/commands/docs/init/scaffold.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAKjE,OAAO,KAAK,EAGV,uBAAuB,EAExB,MAAM,mBAAmB,CAAC;AAmF3B,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACrE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,EAAE,sBAAsB,CAAC;CAC7C;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,MAAM,WAAW,2BAA2B;IAC1C,iBAAiB,EAAE,MAAM,YAAY,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACjE,0BAA0B,EAAE,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,KACZ,YAAY,CAAC,OAAO,CAAC,CAAC;CAC5B;AAUD,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxE;AAgDD,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAaxB;AAgOD,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,EAC/B,SAAS,GAAE,OAAO,CAAC,2BAA2B,CAAM,GACnD,OAAO,CAAC,qBAAqB,CAAC,CAkDhC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { readdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { basename, dirname, join } from 'node:path';
|
|
2
|
+
import { basename, dirname, isAbsolute, join, relative, resolve, } from 'node:path';
|
|
3
3
|
import { dirExists, ensureDir, fileExists } from '../../../fs/io.js';
|
|
4
4
|
import { OAT_VERSION } from '../../../shared/oat-version.js';
|
|
5
|
+
import { buildDocsCommands } from './docs-commands.js';
|
|
5
6
|
import { getTemplateDir } from './resolve-options.js';
|
|
6
7
|
const MKDOCS_TEMPLATE_FILES = [
|
|
7
8
|
{ source: '.gitignore', destination: '.gitignore' },
|
|
@@ -38,6 +39,10 @@ const FUMA_TEMPLATE_FILES = [
|
|
|
38
39
|
source: join('app', 'layout.tsx'),
|
|
39
40
|
destination: join('app', 'layout.tsx'),
|
|
40
41
|
},
|
|
42
|
+
{
|
|
43
|
+
source: join('components', 'search.tsx'),
|
|
44
|
+
destination: join('components', 'search.tsx'),
|
|
45
|
+
},
|
|
41
46
|
{
|
|
42
47
|
source: join('app', '[[...slug]]', 'page.tsx'),
|
|
43
48
|
destination: join('app', '[[...slug]]', 'page.tsx'),
|
|
@@ -74,6 +79,7 @@ const OAT_DEP_PACKAGES = [
|
|
|
74
79
|
];
|
|
75
80
|
const DEFAULT_OAT_PUBLISHED_VERSION = OAT_VERSION;
|
|
76
81
|
const PUBLIC_PACKAGE_VERSIONS_FILE = 'public-package-versions.json';
|
|
82
|
+
export const PNPM_FALLBACK = '10.13.1';
|
|
77
83
|
export async function detectIsOatRepo(repoRoot) {
|
|
78
84
|
for (const pkg of OAT_DEP_PACKAGES) {
|
|
79
85
|
if (!(await fileExists(join(repoRoot, 'packages', pkg, 'package.json')))) {
|
|
@@ -128,13 +134,6 @@ export async function resolveOatDepContext(repoRoot, assetsRoot) {
|
|
|
128
134
|
};
|
|
129
135
|
return { isOatRepo, localPackages, oatPackageVersions };
|
|
130
136
|
}
|
|
131
|
-
function humanizeAppName(appName) {
|
|
132
|
-
return appName
|
|
133
|
-
.split(/[-_]/g)
|
|
134
|
-
.filter(Boolean)
|
|
135
|
-
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
136
|
-
.join(' ');
|
|
137
|
-
}
|
|
138
137
|
function buildDevDependencies(lint, format) {
|
|
139
138
|
const entries = [];
|
|
140
139
|
if (lint === 'markdownlint-cli2') {
|
|
@@ -170,17 +169,75 @@ function oatDepVersion(depContext, packageName) {
|
|
|
170
169
|
}
|
|
171
170
|
return `^${depContext.oatPackageVersions[packageName] ?? DEFAULT_OAT_PUBLISHED_VERSION}`;
|
|
172
171
|
}
|
|
173
|
-
function
|
|
172
|
+
function detectPnpmVersionFromUserAgent() {
|
|
173
|
+
const userAgent = process.env.npm_config_user_agent ?? '';
|
|
174
|
+
return userAgent.match(/\bpnpm\/([^\s]+)/)?.[1] ?? null;
|
|
175
|
+
}
|
|
176
|
+
function isDescendantOrSame(root, candidate) {
|
|
177
|
+
const relativePath = relative(root, candidate);
|
|
178
|
+
return (relativePath === '' ||
|
|
179
|
+
(!relativePath.startsWith('..') && !isAbsolute(relativePath)));
|
|
180
|
+
}
|
|
181
|
+
async function packageJsonHasPackageManager(packageJsonPath) {
|
|
182
|
+
if (!(await fileExists(packageJsonPath))) {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
const parsed = JSON.parse(await readFile(packageJsonPath, 'utf8'));
|
|
187
|
+
return (typeof parsed.packageManager === 'string' &&
|
|
188
|
+
parsed.packageManager.trim().length > 0);
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async function hasInheritedPackageManager(repoRoot, appRoot) {
|
|
195
|
+
const root = resolve(repoRoot);
|
|
196
|
+
let current = resolve(dirname(appRoot));
|
|
197
|
+
while (isDescendantOrSame(root, current)) {
|
|
198
|
+
if (await packageJsonHasPackageManager(join(current, 'package.json'))) {
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
if (current === root) {
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
current = dirname(current);
|
|
205
|
+
}
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
const DEFAULT_SCAFFOLD_DEPENDENCIES = {
|
|
209
|
+
detectPnpmVersion: detectPnpmVersionFromUserAgent,
|
|
210
|
+
hasInheritedPackageManager,
|
|
211
|
+
};
|
|
212
|
+
function normalizePnpmVersion(version) {
|
|
213
|
+
const trimmed = version?.trim();
|
|
214
|
+
return trimmed && trimmed.length > 0 ? trimmed : PNPM_FALLBACK;
|
|
215
|
+
}
|
|
216
|
+
async function buildPackageManagerField(options, appRoot, dependencies) {
|
|
217
|
+
if (await dependencies.hasInheritedPackageManager(options.repoRoot, appRoot)) {
|
|
218
|
+
return '';
|
|
219
|
+
}
|
|
220
|
+
const version = normalizePnpmVersion(await dependencies.detectPnpmVersion());
|
|
221
|
+
return `,\n "packageManager": ${JSON.stringify(`pnpm@${version}`)}`;
|
|
222
|
+
}
|
|
223
|
+
function renderTemplate(template, options, depContext, packageManagerField) {
|
|
174
224
|
const repoName = basename(options.repoRoot);
|
|
175
|
-
const
|
|
225
|
+
const commands = buildDocsCommands(options.repoShape, options.targetDir, options.appName);
|
|
176
226
|
const replacements = {
|
|
177
227
|
'{{APP_NAME}}': options.appName,
|
|
178
228
|
'{{PACKAGE_NAME}}': options.appName,
|
|
179
|
-
'{{SITE_NAME}}': siteName,
|
|
229
|
+
'{{SITE_NAME}}': options.siteName,
|
|
180
230
|
'{{SITE_DESCRIPTION}}': options.siteDescription,
|
|
231
|
+
'{{INSTALL_CMD}}': commands.install,
|
|
232
|
+
'{{DEV_CMD}}': commands.dev,
|
|
233
|
+
'{{BUILD_CMD}}': commands.build,
|
|
234
|
+
'{{PACKAGE_MANAGER_FIELD}}': packageManagerField,
|
|
181
235
|
'{{DOCS_LINT_SCRIPT}}': options.lint === 'markdownlint-cli2'
|
|
182
236
|
? "markdownlint-cli2 'docs/**/*.md'"
|
|
183
237
|
: "echo 'docs lint disabled'",
|
|
238
|
+
'{{LINT_PHRASE}}': options.lint === 'markdownlint-cli2'
|
|
239
|
+
? 'formatting and linting'
|
|
240
|
+
: 'formatting',
|
|
184
241
|
'{{DOCS_FORMAT_SCRIPT}}': options.format === 'oxfmt'
|
|
185
242
|
? "oxfmt 'docs/**/*.md'"
|
|
186
243
|
: "echo 'docs formatting disabled'",
|
|
@@ -223,23 +280,28 @@ async function ensureTargetWritable(appRoot) {
|
|
|
223
280
|
throw new Error(`Docs app target directory is not empty: ${appRoot}`);
|
|
224
281
|
}
|
|
225
282
|
}
|
|
226
|
-
export async function scaffoldDocsApp(options) {
|
|
283
|
+
export async function scaffoldDocsApp(options, overrides = {}) {
|
|
227
284
|
const appRoot = join(options.repoRoot, options.targetDir);
|
|
228
285
|
const templateDir = getTemplateDir(options.framework);
|
|
229
286
|
const templateRoot = join(options.assetsRoot, 'templates', templateDir);
|
|
230
287
|
const frameworkConfig = FRAMEWORK_CONFIGS[options.framework];
|
|
231
288
|
const createdFiles = [];
|
|
232
289
|
const depContext = await resolveOatDepContext(options.repoRoot, options.assetsRoot);
|
|
290
|
+
const dependencies = {
|
|
291
|
+
...DEFAULT_SCAFFOLD_DEPENDENCIES,
|
|
292
|
+
...overrides,
|
|
293
|
+
};
|
|
233
294
|
if (!(await fileExists(join(templateRoot, frameworkConfig.sentinelFile)))) {
|
|
234
295
|
throw new Error(`Docs app templates not found under ${templateRoot}`);
|
|
235
296
|
}
|
|
236
297
|
await ensureTargetWritable(appRoot);
|
|
237
298
|
await ensureDir(appRoot);
|
|
299
|
+
const packageManagerField = await buildPackageManagerField(options, appRoot, dependencies);
|
|
238
300
|
for (const templateFile of frameworkConfig.templateFiles) {
|
|
239
301
|
const source = join(templateRoot, templateFile.source);
|
|
240
302
|
const destination = join(appRoot, templateFile.destination);
|
|
241
303
|
const template = await readFile(source, 'utf8');
|
|
242
|
-
const rendered = renderTemplate(template, options, depContext);
|
|
304
|
+
const rendered = renderTemplate(template, options, depContext, packageManagerField);
|
|
243
305
|
await ensureDir(dirname(destination));
|
|
244
306
|
await writeFile(destination, rendered, 'utf8');
|
|
245
307
|
createdFiles.push(templateFile.destination);
|
|
@@ -52,6 +52,16 @@ export interface InitToolsDependencies {
|
|
|
52
52
|
interface InitToolsRunMetadata {
|
|
53
53
|
affectedScopes: ConcreteScope[];
|
|
54
54
|
}
|
|
55
|
+
interface PackScopeChange {
|
|
56
|
+
pack: ToolPack;
|
|
57
|
+
scope: ConcreteScope;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Render a batch change summary (`+ pack@scope` adds / `- pack@scope` removes)
|
|
61
|
+
* for the interactive removal-confirmation gate. Pure for snapshot-friendly
|
|
62
|
+
* testing.
|
|
63
|
+
*/
|
|
64
|
+
export declare function formatReconcileSummary(adds: PackScopeChange[], removes: PackScopeChange[]): string;
|
|
55
65
|
export declare function consumeInitToolsRunMetadata(): InitToolsRunMetadata | null;
|
|
56
66
|
interface PackScopeInfo {
|
|
57
67
|
pack: ToolPack;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/tools/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/init/tools/index.ts"],"names":[],"mappings":"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"}
|