pokedocs 0.1.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Wesley Huber
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * pokedocs CLI entry point. `deploy init` is live (F1.7); the other
4
+ * commands arrive with their milestones (see src/index.ts).
5
+ */
6
+ export declare function runCli(argv: string[]): Promise<number>;
7
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AAgEH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsB5D"}
package/dist/cli.js ADDED
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * pokedocs CLI entry point. `deploy init` is live (F1.7); the other
5
+ * commands arrive with their milestones (see src/index.ts).
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.runCli = runCli;
9
+ const node_util_1 = require("node:util");
10
+ const init_js_1 = require("./deploy/init.js");
11
+ const index_js_1 = require("./index.js");
12
+ const DEPLOY_USAGE = `Usage: pokedocs deploy init <target> [options]
13
+
14
+ Targets:
15
+ ${(0, init_js_1.targetList)()}
16
+
17
+ Options:
18
+ --base-url <path> Base path override (default: read from docusaurus.config)
19
+ --domain <host> Custom domain (github-pages: writes static/CNAME)
20
+ --force Overwrite existing files
21
+ -h, --help Show this help
22
+ `;
23
+ async function runDeploy(rest) {
24
+ let values;
25
+ let positionals;
26
+ try {
27
+ ({ values, positionals } = (0, node_util_1.parseArgs)({
28
+ args: rest,
29
+ allowPositionals: true,
30
+ options: {
31
+ 'base-url': { type: 'string' },
32
+ domain: { type: 'string' },
33
+ force: { type: 'boolean', default: false },
34
+ help: { type: 'boolean', short: 'h', default: false },
35
+ },
36
+ }));
37
+ }
38
+ catch (error) {
39
+ console.error(`pokedocs: ${error.message}\n\n${DEPLOY_USAGE}`);
40
+ return 1;
41
+ }
42
+ if (values.help || positionals.length === 0) {
43
+ console.log(DEPLOY_USAGE);
44
+ return values.help ? 0 : 1;
45
+ }
46
+ try {
47
+ const result = await (0, init_js_1.runDeployInit)(positionals[0], process.cwd(), {
48
+ baseUrl: values['base-url'],
49
+ domain: values.domain,
50
+ force: values.force,
51
+ });
52
+ console.log(`pokedocs deploy init ${result.target}: wrote ${result.written.join(', ')}\n\n${result.nextSteps}`);
53
+ return 0;
54
+ }
55
+ catch (error) {
56
+ if (error instanceof init_js_1.DeployInitError) {
57
+ console.error(`pokedocs: ${error.message}`);
58
+ return 1;
59
+ }
60
+ throw error;
61
+ }
62
+ }
63
+ async function runCli(argv) {
64
+ const [command, subcommand, ...rest] = argv;
65
+ if (command === 'deploy') {
66
+ if (subcommand !== 'init') {
67
+ console.error(DEPLOY_USAGE);
68
+ return 1;
69
+ }
70
+ return runDeploy(rest);
71
+ }
72
+ if (command && index_js_1.COMMANDS.includes(command)) {
73
+ console.error(`pokedocs ${command} is not implemented yet — follow along at github.com/wbaxterh/pokedocs`);
74
+ return 1;
75
+ }
76
+ console.error(`pokedocs — agent-native docs tooling.\n\nCommands:\n deploy init <target> scaffold deploy artifacts\n check, export, mcp coming with their milestones\n\n${DEPLOY_USAGE}`);
77
+ return 1;
78
+ }
79
+ if (require.main === module) {
80
+ runCli(process.argv.slice(2)).then((code) => {
81
+ process.exitCode = code;
82
+ });
83
+ }
84
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Docker/nginx target (S1.7.2): a maintained multi-stage build — node +
3
+ * chromium builder (build-time mermaid needs a browser), static files
4
+ * behind unprivileged nginx. Non-root runtime, port 8080, try_files
5
+ * derived from the site's configured baseUrl.
6
+ */
7
+ import type { DeployTarget } from './targets.js';
8
+ export declare const dockerTarget: DeployTarget;
9
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/deploy/docker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA+DjD,eAAO,MAAM,YAAY,EAAE,YAkB1B,CAAC"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * Docker/nginx target (S1.7.2): a maintained multi-stage build — node +
4
+ * chromium builder (build-time mermaid needs a browser), static files
5
+ * behind unprivileged nginx. Non-root runtime, port 8080, try_files
6
+ * derived from the site's configured baseUrl.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.dockerTarget = void 0;
10
+ function dockerfile(baseUrl) {
11
+ const mount = baseUrl === '/' ? '' : baseUrl.replace(/\/$/, '');
12
+ return `# Build stage: node + chromium (mermaid renders to SVG at build time)
13
+ FROM node:22-bookworm AS builder
14
+ WORKDIR /site
15
+ COPY package.json package-lock.json* ./
16
+ RUN if [ -f package-lock.json ]; then npm ci; else npm install; fi
17
+ RUN npx playwright install --with-deps chromium
18
+ COPY . .
19
+ # Site URL override at image build time (S1.7.3), e.g.
20
+ # docker build --build-arg POKEDOCS_URL=https://docs.mycompany.dev .
21
+ ARG POKEDOCS_URL
22
+ ARG POKEDOCS_BASE_URL
23
+ ENV POKEDOCS_URL=\${POKEDOCS_URL} POKEDOCS_BASE_URL=\${POKEDOCS_BASE_URL}
24
+ RUN npm run build
25
+
26
+ # Runtime stage: static files behind unprivileged nginx (non-root, port 8080)
27
+ FROM nginxinc/nginx-unprivileged:1.27-alpine
28
+ COPY nginx.conf /etc/nginx/conf.d/default.conf
29
+ COPY --from=builder /site/build /usr/share/nginx/html${mount}
30
+ EXPOSE 8080
31
+ `;
32
+ }
33
+ function nginxConf(baseUrl) {
34
+ const rootRedirect = baseUrl === '/'
35
+ ? ''
36
+ : `
37
+ # The site lives under ${baseUrl} — bounce the bare root there.
38
+ location = / {
39
+ return 302 ${baseUrl};
40
+ }
41
+ `;
42
+ return `server {
43
+ listen 8080;
44
+ server_name _;
45
+
46
+ root /usr/share/nginx/html;
47
+ index index.html;
48
+
49
+ gzip on;
50
+ gzip_types text/plain text/css application/javascript application/json image/svg+xml;
51
+
52
+ error_page 404 ${baseUrl}404.html;
53
+ ${rootRedirect}
54
+ # Docusaurus emits a directory per route with an index.html; markdown
55
+ # twins, llms.txt, and other agent artifacts are plain files.
56
+ location ${baseUrl} {
57
+ try_files $uri $uri/ =404;
58
+ }
59
+ }
60
+ `;
61
+ }
62
+ const DOCKERIGNORE = `node_modules
63
+ build
64
+ .docusaurus
65
+ .git
66
+ `;
67
+ exports.dockerTarget = {
68
+ name: 'docker',
69
+ description: 'Multi-stage Dockerfile + non-root nginx for self-hosting',
70
+ files({ baseUrl }) {
71
+ return [
72
+ { path: 'Dockerfile', content: dockerfile(baseUrl) },
73
+ { path: 'nginx.conf', content: nginxConf(baseUrl) },
74
+ { path: '.dockerignore', content: DOCKERIGNORE },
75
+ ];
76
+ },
77
+ nextSteps({ baseUrl }) {
78
+ return [
79
+ 'Build and run:',
80
+ ' docker build -t my-docs .',
81
+ ' docker run --rm -p 8080:8080 my-docs',
82
+ `Then open http://localhost:8080${baseUrl}`,
83
+ ].join('\n');
84
+ },
85
+ };
86
+ //# sourceMappingURL=docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/deploy/docker.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,SAAS,UAAU,CAAC,OAAe;IACjC,MAAM,KAAK,GAAG,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChE,OAAO;;;;;;;;;;;;;;;;;uDAiB8C,KAAK;;CAE3D,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAAC,OAAe;IAChC,MAAM,YAAY,GAChB,OAAO,KAAK,GAAG;QACb,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;2BACmB,OAAO;;iBAEjB,OAAO;;CAEvB,CAAC;IACA,OAAO;;;;;;;;;;mBAUU,OAAO;EACxB,YAAY;;;aAGD,OAAO;;;;CAInB,CAAC;AACF,CAAC;AAED,MAAM,YAAY,GAAG;;;;CAIpB,CAAC;AAEW,QAAA,YAAY,GAAiB;IACxC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,0DAA0D;IACvE,KAAK,CAAC,EAAE,OAAO,EAAE;QACf,OAAO;YACL,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE;YACpD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;YACnD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE;SACjD,CAAC;IACJ,CAAC;IACD,SAAS,CAAC,EAAE,OAAO,EAAE;QACnB,OAAO;YACL,gBAAgB;YAChB,6BAA6B;YAC7B,wCAAwC;YACxC,kCAAkC,OAAO,EAAE;SAC5C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * GitHub Pages target (S1.7.1): the same workflow shape that deploys the
3
+ * PokeDocs dogfood site on every merge — checkout, npm install, chromium
4
+ * for build-time mermaid (cached), build, upload-pages-artifact,
5
+ * deploy-pages. Non-Actions setups also get .nojekyll, and --domain
6
+ * writes the CNAME.
7
+ */
8
+ import type { DeployTarget } from './targets.js';
9
+ export declare const githubPagesTarget: DeployTarget;
10
+ //# sourceMappingURL=github-pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-pages.d.ts","sourceRoot":"","sources":["../../src/deploy/github-pages.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAqDjD,eAAO,MAAM,iBAAiB,EAAE,YAsB/B,CAAC"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ /**
3
+ * GitHub Pages target (S1.7.1): the same workflow shape that deploys the
4
+ * PokeDocs dogfood site on every merge — checkout, npm install, chromium
5
+ * for build-time mermaid (cached), build, upload-pages-artifact,
6
+ * deploy-pages. Non-Actions setups also get .nojekyll, and --domain
7
+ * writes the CNAME.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.githubPagesTarget = void 0;
11
+ const WORKFLOW = `name: Deploy Docs
12
+
13
+ # Publishes to GitHub Pages on every push to main. One-time setup:
14
+ # repo Settings → Pages → Source: "GitHub Actions".
15
+
16
+ on:
17
+ push:
18
+ branches: [main]
19
+
20
+ permissions:
21
+ contents: read
22
+ pages: write
23
+ id-token: write
24
+
25
+ concurrency:
26
+ group: deploy-docs
27
+ cancel-in-progress: true
28
+
29
+ jobs:
30
+ build:
31
+ runs-on: ubuntu-latest
32
+ steps:
33
+ - uses: actions/checkout@v4
34
+ - uses: actions/setup-node@v4
35
+ with:
36
+ node-version: 22
37
+ cache: npm
38
+ - run: npm ci
39
+ - name: Cache playwright browsers
40
+ uses: actions/cache@v4
41
+ with:
42
+ path: ~/.cache/ms-playwright
43
+ key: playwright-\${{ runner.os }}-\${{ hashFiles('package-lock.json') }}
44
+ # Mermaid renders at build time via chromium
45
+ - run: npx playwright install --with-deps chromium
46
+ - run: npm run build
47
+ - uses: actions/upload-pages-artifact@v3
48
+ with:
49
+ path: build
50
+
51
+ deploy:
52
+ needs: build
53
+ runs-on: ubuntu-latest
54
+ environment:
55
+ name: github-pages
56
+ url: \${{ steps.deployment.outputs.page_url }}
57
+ steps:
58
+ - id: deployment
59
+ uses: actions/deploy-pages@v4
60
+ `;
61
+ exports.githubPagesTarget = {
62
+ name: 'github-pages',
63
+ description: 'GitHub Actions workflow publishing to GitHub Pages',
64
+ files({ domain }) {
65
+ return [
66
+ { path: '.github/workflows/deploy.yml', content: WORKFLOW },
67
+ // Harmless under actions/deploy-pages; protects anyone who later
68
+ // serves the build/ dir from a branch, where Jekyll would eat
69
+ // underscore-prefixed asset paths.
70
+ { path: 'static/.nojekyll', content: '' },
71
+ ...(domain ? [{ path: 'static/CNAME', content: `${domain}\n` }] : []),
72
+ ];
73
+ },
74
+ nextSteps({ domain, baseUrl }) {
75
+ const lines = [
76
+ 'Push to main, then set repo Settings → Pages → Source to "GitHub Actions".',
77
+ domain
78
+ ? `Custom domain: set \`url: 'https://${domain}'\` and \`baseUrl: '/'\` in docusaurus.config.ts, and configure the domain under Settings → Pages.`
79
+ : `Project pages serve from https://<owner>.github.io/<repo>/ — make sure url/baseUrl match (current baseUrl: ${baseUrl}).`,
80
+ ];
81
+ return lines.join('\n');
82
+ },
83
+ };
84
+ //# sourceMappingURL=github-pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-pages.js","sourceRoot":"","sources":["../../src/deploy/github-pages.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAIH,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDhB,CAAC;AAEW,QAAA,iBAAiB,GAAiB;IAC7C,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,oDAAoD;IACjE,KAAK,CAAC,EAAE,MAAM,EAAE;QACd,OAAO;YACL,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC3D,iEAAiE;YACjE,8DAA8D;YAC9D,mCAAmC;YACnC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,EAAE;YACzC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAC;IACJ,CAAC;IACD,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE;QAC3B,MAAM,KAAK,GAAG;YACZ,4EAA4E;YAC5E,MAAM;gBACJ,CAAC,CAAC,sCAAsC,MAAM,oGAAoG;gBAClJ,CAAC,CAAC,8GAA8G,OAAO,IAAI;SAC9H,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `pokedocs deploy init <target>` — resolves the site context, asks the
3
+ * target for its files, and writes them without clobbering anything
4
+ * unless --force.
5
+ */
6
+ import type { DeployTarget } from './targets.js';
7
+ export declare const DEPLOY_TARGETS: DeployTarget[];
8
+ export declare class DeployInitError extends Error {
9
+ }
10
+ export interface DeployInitFlags {
11
+ baseUrl?: string;
12
+ domain?: string;
13
+ force?: boolean;
14
+ }
15
+ export interface DeployInitResult {
16
+ target: string;
17
+ written: string[];
18
+ nextSteps: string;
19
+ }
20
+ export declare function targetList(): string;
21
+ export declare function runDeployInit(targetName: string, siteDir: string, flags?: DeployInitFlags): Promise<DeployInitResult>;
22
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/deploy/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAqB,YAAY,EAAE,MAAM,cAAc,CAAC;AAGpE,eAAO,MAAM,cAAc,EAAE,YAAY,EAAsC,CAAC;AAEhF,qBAAa,eAAgB,SAAQ,KAAK;CAAG;AAE7C,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,IAAI,MAAM,CAInC;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,eAAoB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAkD3B"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * `pokedocs deploy init <target>` — resolves the site context, asks the
4
+ * target for its files, and writes them without clobbering anything
5
+ * unless --force.
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.DeployInitError = exports.DEPLOY_TARGETS = void 0;
12
+ exports.targetList = targetList;
13
+ exports.runDeployInit = runDeployInit;
14
+ const promises_1 = require("node:fs/promises");
15
+ const node_path_1 = __importDefault(require("node:path"));
16
+ const docker_js_1 = require("./docker.js");
17
+ const github_pages_js_1 = require("./github-pages.js");
18
+ const targets_js_1 = require("./targets.js");
19
+ exports.DEPLOY_TARGETS = [github_pages_js_1.githubPagesTarget, docker_js_1.dockerTarget];
20
+ class DeployInitError extends Error {
21
+ }
22
+ exports.DeployInitError = DeployInitError;
23
+ function targetList() {
24
+ return exports.DEPLOY_TARGETS.map((t) => ` ${t.name.padEnd(14)}${t.description}`).join('\n');
25
+ }
26
+ async function runDeployInit(targetName, siteDir, flags = {}) {
27
+ const target = exports.DEPLOY_TARGETS.find((t) => t.name === targetName);
28
+ if (!target) {
29
+ throw new DeployInitError(`unknown deploy target ${JSON.stringify(targetName)}. Available targets:\n${targetList()}`);
30
+ }
31
+ const configFile = await (0, targets_js_1.findSiteConfig)(siteDir);
32
+ if (!configFile) {
33
+ throw new DeployInitError(`no docusaurus.config.ts/js found in ${siteDir} — run this from your site directory.`);
34
+ }
35
+ let baseUrl = flags.baseUrl;
36
+ if (baseUrl === undefined) {
37
+ baseUrl = (0, targets_js_1.parseBaseUrl)(await (0, promises_1.readFile)(configFile, 'utf8')) ?? '/';
38
+ }
39
+ const context = {
40
+ siteDir,
41
+ baseUrl: (0, targets_js_1.normalizeBaseUrl)(baseUrl),
42
+ domain: flags.domain,
43
+ };
44
+ const files = target.files(context);
45
+ if (!flags.force) {
46
+ for (const file of files) {
47
+ const existing = await (0, promises_1.readFile)(node_path_1.default.join(siteDir, file.path), 'utf8').catch(() => null);
48
+ if (existing !== null && existing !== file.content) {
49
+ throw new DeployInitError(`${file.path} already exists — re-run with --force to overwrite.`);
50
+ }
51
+ }
52
+ }
53
+ const written = [];
54
+ for (const file of files) {
55
+ const absolute = node_path_1.default.join(siteDir, file.path);
56
+ await (0, promises_1.mkdir)(node_path_1.default.dirname(absolute), { recursive: true });
57
+ await (0, promises_1.writeFile)(absolute, file.content);
58
+ written.push(file.path);
59
+ }
60
+ return { target: target.name, written, nextSteps: target.nextSteps(context) };
61
+ }
62
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/deploy/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * `pokedocs deploy init` plumbing (S1.7.1): pluggable targets that emit
3
+ * verified deploy artifacts into an existing site. Each target is pure —
4
+ * files in, files out — so targets are unit-testable and adding one is a
5
+ * single registry entry.
6
+ */
7
+ export interface DeployInitContext {
8
+ /** Absolute site directory. */
9
+ siteDir: string;
10
+ /** The site's base path, e.g. "/" or "/my-docs/". */
11
+ baseUrl: string;
12
+ /** Custom domain (github-pages): writes static/CNAME. */
13
+ domain?: string;
14
+ }
15
+ export interface EmittedFile {
16
+ /** Path relative to the site dir. */
17
+ path: string;
18
+ content: string;
19
+ }
20
+ export interface DeployTarget {
21
+ name: string;
22
+ description: string;
23
+ files(context: DeployInitContext): EmittedFile[];
24
+ nextSteps(context: DeployInitContext): string;
25
+ }
26
+ export declare function findSiteConfig(siteDir: string): Promise<string | null>;
27
+ /**
28
+ * Best-effort baseUrl from the config source: the first string literal on
29
+ * the `baseUrl:` line — which is the fallback in scaffolded configs like
30
+ * `baseUrl: process.env.POKEDOCS_BASE_URL ?? '/my-docs/'`.
31
+ */
32
+ export declare function parseBaseUrl(configSource: string): string | null;
33
+ /** Normalize to leading+trailing slash form ('/', '/my-docs/'). */
34
+ export declare function normalizeBaseUrl(baseUrl: string): string;
35
+ //# sourceMappingURL=targets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../src/deploy/targets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,EAAE,CAAC;IACjD,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAAC;CAC/C;AAQD,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAY5E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhE;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASxD"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ /**
3
+ * `pokedocs deploy init` plumbing (S1.7.1): pluggable targets that emit
4
+ * verified deploy artifacts into an existing site. Each target is pure —
5
+ * files in, files out — so targets are unit-testable and adding one is a
6
+ * single registry entry.
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.findSiteConfig = findSiteConfig;
13
+ exports.parseBaseUrl = parseBaseUrl;
14
+ exports.normalizeBaseUrl = normalizeBaseUrl;
15
+ const promises_1 = require("node:fs/promises");
16
+ const node_path_1 = __importDefault(require("node:path"));
17
+ const CONFIG_FILES = [
18
+ 'docusaurus.config.ts',
19
+ 'docusaurus.config.js',
20
+ 'docusaurus.config.mjs',
21
+ ];
22
+ async function findSiteConfig(siteDir) {
23
+ for (const name of CONFIG_FILES) {
24
+ const file = node_path_1.default.join(siteDir, name);
25
+ const found = await (0, promises_1.readFile)(file, 'utf8').then(() => file, () => null);
26
+ if (found) {
27
+ return found;
28
+ }
29
+ }
30
+ return null;
31
+ }
32
+ /**
33
+ * Best-effort baseUrl from the config source: the first string literal on
34
+ * the `baseUrl:` line — which is the fallback in scaffolded configs like
35
+ * `baseUrl: process.env.POKEDOCS_BASE_URL ?? '/my-docs/'`.
36
+ */
37
+ function parseBaseUrl(configSource) {
38
+ const match = configSource.match(/baseUrl:[^\n]*?['"`]([^'"`]*)['"`]/);
39
+ return match ? match[1] : null;
40
+ }
41
+ /** Normalize to leading+trailing slash form ('/', '/my-docs/'). */
42
+ function normalizeBaseUrl(baseUrl) {
43
+ let normalized = baseUrl.trim();
44
+ if (!normalized.startsWith('/')) {
45
+ normalized = `/${normalized}`;
46
+ }
47
+ if (!normalized.endsWith('/')) {
48
+ normalized = `${normalized}/`;
49
+ }
50
+ return normalized;
51
+ }
52
+ //# sourceMappingURL=targets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"targets.js","sourceRoot":"","sources":["../../src/deploy/targets.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAiCH,wCAYC;AAOD,oCAGC;AAGD,4CASC;AAjED,+CAA4C;AAC5C,0DAA6B;AAwB7B,MAAM,YAAY,GAAG;IACnB,sBAAsB;IACtB,sBAAsB;IACtB,uBAAuB;CACxB,CAAC;AAEK,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CAC7C,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE,CAAC,IAAI,CACX,CAAC;QACF,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,YAAoB;IAC/C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,mEAAmE;AACnE,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IAChC,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,UAAU,GAAG,GAAG,UAAU,GAAG,CAAC;IAChC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * pokedocs — the CLI (PRD F1.7, F2.1, F5.2).
3
+ *
4
+ * Commands land milestone by milestone:
5
+ * deploy init — scaffold deploy artifacts per platform (M1, S1.7.1/S1.7.2)
6
+ * check — the docs linter for what a green build won't catch (M2, F2.1)
7
+ * export pdf — themed PDF export driven by the real sidebar (M5, S5.2.1)
8
+ * mcp — optional local docs MCP server (M3, S3.3.2)
9
+ *
10
+ * Design constraint (PRD Open Question 5): Docusaurus CLI commands are not
11
+ * natively site-context-aware; commands here likely consume context cached
12
+ * at build time.
13
+ */
14
+ export declare const COMMANDS: readonly ["check", "export", "deploy", "mcp"];
15
+ export type PokedocsCommand = (typeof COMMANDS)[number];
16
+ export { DEPLOY_TARGETS, DeployInitError, type DeployInitFlags, type DeployInitResult, runDeployInit, targetList, } from './deploy/init.js';
17
+ export type { DeployInitContext, DeployTarget, EmittedFile, } from './deploy/targets.js';
18
+ export { normalizeBaseUrl, parseBaseUrl, } from './deploy/targets.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,QAAQ,+CAAgD,CAAC;AACtE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,aAAa,EACb,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,YAAY,GACb,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /**
3
+ * pokedocs — the CLI (PRD F1.7, F2.1, F5.2).
4
+ *
5
+ * Commands land milestone by milestone:
6
+ * deploy init — scaffold deploy artifacts per platform (M1, S1.7.1/S1.7.2)
7
+ * check — the docs linter for what a green build won't catch (M2, F2.1)
8
+ * export pdf — themed PDF export driven by the real sidebar (M5, S5.2.1)
9
+ * mcp — optional local docs MCP server (M3, S3.3.2)
10
+ *
11
+ * Design constraint (PRD Open Question 5): Docusaurus CLI commands are not
12
+ * natively site-context-aware; commands here likely consume context cached
13
+ * at build time.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.parseBaseUrl = exports.normalizeBaseUrl = exports.targetList = exports.runDeployInit = exports.DeployInitError = exports.DEPLOY_TARGETS = exports.COMMANDS = void 0;
17
+ exports.COMMANDS = ['check', 'export', 'deploy', 'mcp'];
18
+ var init_js_1 = require("./deploy/init.js");
19
+ Object.defineProperty(exports, "DEPLOY_TARGETS", { enumerable: true, get: function () { return init_js_1.DEPLOY_TARGETS; } });
20
+ Object.defineProperty(exports, "DeployInitError", { enumerable: true, get: function () { return init_js_1.DeployInitError; } });
21
+ Object.defineProperty(exports, "runDeployInit", { enumerable: true, get: function () { return init_js_1.runDeployInit; } });
22
+ Object.defineProperty(exports, "targetList", { enumerable: true, get: function () { return init_js_1.targetList; } });
23
+ var targets_js_1 = require("./deploy/targets.js");
24
+ Object.defineProperty(exports, "normalizeBaseUrl", { enumerable: true, get: function () { return targets_js_1.normalizeBaseUrl; } });
25
+ Object.defineProperty(exports, "parseBaseUrl", { enumerable: true, get: function () { return targets_js_1.parseBaseUrl; } });
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAEU,QAAA,QAAQ,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAU,CAAC;AAGtE,4CAO0B;AANxB,yGAAA,cAAc,OAAA;AACd,0GAAA,eAAe,OAAA;AAGf,wGAAA,aAAa,OAAA;AACb,qGAAA,UAAU,OAAA;AAOZ,kDAG6B;AAF3B,8GAAA,gBAAgB,OAAA;AAChB,0GAAA,YAAY,OAAA"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "pokedocs",
3
+ "version": "0.1.0",
4
+ "description": "PokeDocs CLI — check, export, deploy init, mcp",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/wbaxterh/pokedocs.git",
9
+ "directory": "packages/pokedocs"
10
+ },
11
+ "main": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "bin": {
14
+ "pokedocs": "./dist/cli.js"
15
+ },
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "default": "./dist/index.js"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "engines": {
29
+ "node": ">=20"
30
+ }
31
+ }