@shahadpichen/docpush 1.0.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/README.md +129 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +116 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/start.d.ts +4 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +58 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +22 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/config/index.d.ts +3 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/index.js +9 -0
- package/dist/core/config/index.js.map +1 -0
- package/dist/core/config/loader.d.ts +6 -0
- package/dist/core/config/loader.d.ts.map +1 -0
- package/dist/core/config/loader.js +50 -0
- package/dist/core/config/loader.js.map +1 -0
- package/dist/core/config/schema.d.ts +134 -0
- package/dist/core/config/schema.d.ts.map +1 -0
- package/dist/core/config/schema.js +106 -0
- package/dist/core/config/schema.js.map +1 -0
- package/dist/core/errors.d.ts +45 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +76 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/github/client.d.ts +47 -0
- package/dist/core/github/client.d.ts.map +1 -0
- package/dist/core/github/client.js +159 -0
- package/dist/core/github/client.js.map +1 -0
- package/dist/core/github/index.d.ts +4 -0
- package/dist/core/github/index.d.ts.map +1 -0
- package/dist/core/github/index.js +9 -0
- package/dist/core/github/index.js.map +1 -0
- package/dist/core/github/retry.d.ts +15 -0
- package/dist/core/github/retry.d.ts.map +1 -0
- package/dist/core/github/retry.js +61 -0
- package/dist/core/github/retry.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/react/components/comments-panel.d.ts +14 -0
- package/dist/react/components/comments-panel.d.ts.map +1 -0
- package/dist/react/components/comments-panel.js +62 -0
- package/dist/react/components/comments-panel.js.map +1 -0
- package/dist/react/components/docs-sidebar.d.ts +13 -0
- package/dist/react/components/docs-sidebar.d.ts.map +1 -0
- package/dist/react/components/docs-sidebar.js +70 -0
- package/dist/react/components/docs-sidebar.js.map +1 -0
- package/dist/react/components/drafts-list.d.ts +18 -0
- package/dist/react/components/drafts-list.d.ts.map +1 -0
- package/dist/react/components/drafts-list.js +38 -0
- package/dist/react/components/drafts-list.js.map +1 -0
- package/dist/react/components/markdown-editor.d.ts +8 -0
- package/dist/react/components/markdown-editor.d.ts.map +1 -0
- package/dist/react/components/markdown-editor.js +59 -0
- package/dist/react/components/markdown-editor.js.map +1 -0
- package/dist/react/components/markdown-viewer.d.ts +7 -0
- package/dist/react/components/markdown-viewer.d.ts.map +1 -0
- package/dist/react/components/markdown-viewer.js +58 -0
- package/dist/react/components/markdown-viewer.js.map +1 -0
- package/dist/react/components/search-bar.d.ts +14 -0
- package/dist/react/components/search-bar.d.ts.map +1 -0
- package/dist/react/components/search-bar.js +80 -0
- package/dist/react/components/search-bar.js.map +1 -0
- package/dist/react/components/ui/badge.d.ts +10 -0
- package/dist/react/components/ui/badge.d.ts.map +1 -0
- package/dist/react/components/ui/badge.js +27 -0
- package/dist/react/components/ui/badge.js.map +1 -0
- package/dist/react/components/ui/button.d.ts +12 -0
- package/dist/react/components/ui/button.d.ts.map +1 -0
- package/dist/react/components/ui/button.js +71 -0
- package/dist/react/components/ui/button.js.map +1 -0
- package/dist/react/components/ui/card.d.ts +7 -0
- package/dist/react/components/ui/card.d.ts.map +1 -0
- package/dist/react/components/ui/card.js +52 -0
- package/dist/react/components/ui/card.js.map +1 -0
- package/dist/react/components/ui/input.d.ts +6 -0
- package/dist/react/components/ui/input.d.ts.map +1 -0
- package/dist/react/components/ui/input.js +45 -0
- package/dist/react/components/ui/input.js.map +1 -0
- package/dist/react/components/ui/scroll-area.d.ts +6 -0
- package/dist/react/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/react/components/ui/scroll-area.js +48 -0
- package/dist/react/components/ui/scroll-area.js.map +1 -0
- package/dist/react/components/ui/textarea.d.ts +6 -0
- package/dist/react/components/ui/textarea.d.ts.map +1 -0
- package/dist/react/components/ui/textarea.js +45 -0
- package/dist/react/components/ui/textarea.js.map +1 -0
- package/dist/react/context/docpush-provider.d.ts +17 -0
- package/dist/react/context/docpush-provider.d.ts.map +1 -0
- package/dist/react/context/docpush-provider.js +72 -0
- package/dist/react/context/docpush-provider.js.map +1 -0
- package/dist/react/hooks/use-auth.d.ts +16 -0
- package/dist/react/hooks/use-auth.d.ts.map +1 -0
- package/dist/react/hooks/use-auth.js +72 -0
- package/dist/react/hooks/use-auth.js.map +1 -0
- package/dist/react/hooks/use-comments.d.ts +15 -0
- package/dist/react/hooks/use-comments.d.ts.map +1 -0
- package/dist/react/hooks/use-comments.js +67 -0
- package/dist/react/hooks/use-comments.js.map +1 -0
- package/dist/react/hooks/use-docs.d.ts +13 -0
- package/dist/react/hooks/use-docs.d.ts.map +1 -0
- package/dist/react/hooks/use-docs.js +69 -0
- package/dist/react/hooks/use-docs.js.map +1 -0
- package/dist/react/hooks/use-drafts.d.ts +25 -0
- package/dist/react/hooks/use-drafts.d.ts.map +1 -0
- package/dist/react/hooks/use-drafts.js +99 -0
- package/dist/react/hooks/use-drafts.js.map +1 -0
- package/dist/react/index.d.ts +19 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +52 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/lib/utils.d.ts +3 -0
- package/dist/react/lib/utils.d.ts.map +1 -0
- package/dist/react/lib/utils.js +9 -0
- package/dist/react/lib/utils.js.map +1 -0
- package/dist/server/auth/index.d.ts +18 -0
- package/dist/server/auth/index.d.ts.map +1 -0
- package/dist/server/auth/index.js +50 -0
- package/dist/server/auth/index.js.map +1 -0
- package/dist/server/auth/magic-link.d.ts +10 -0
- package/dist/server/auth/magic-link.d.ts.map +1 -0
- package/dist/server/auth/magic-link.js +94 -0
- package/dist/server/auth/magic-link.js.map +1 -0
- package/dist/server/auth/oauth.d.ts +6 -0
- package/dist/server/auth/oauth.d.ts.map +1 -0
- package/dist/server/auth/oauth.js +90 -0
- package/dist/server/auth/oauth.js.map +1 -0
- package/dist/server/auth/public.d.ts +7 -0
- package/dist/server/auth/public.d.ts.map +1 -0
- package/dist/server/auth/public.js +43 -0
- package/dist/server/auth/public.js.map +1 -0
- package/dist/server/index.d.ts +12 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +107 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/middleware/auth.d.ts +20 -0
- package/dist/server/middleware/auth.d.ts.map +1 -0
- package/dist/server/middleware/auth.js +49 -0
- package/dist/server/middleware/auth.js.map +1 -0
- package/dist/server/routes/auth.d.ts +3 -0
- package/dist/server/routes/auth.d.ts.map +1 -0
- package/dist/server/routes/auth.js +105 -0
- package/dist/server/routes/auth.js.map +1 -0
- package/dist/server/routes/docs.d.ts +3 -0
- package/dist/server/routes/docs.d.ts.map +1 -0
- package/dist/server/routes/docs.js +58 -0
- package/dist/server/routes/docs.js.map +1 -0
- package/dist/server/routes/drafts.d.ts +3 -0
- package/dist/server/routes/drafts.d.ts.map +1 -0
- package/dist/server/routes/drafts.js +264 -0
- package/dist/server/routes/drafts.js.map +1 -0
- package/dist/server/routes/index.d.ts +4 -0
- package/dist/server/routes/index.d.ts.map +1 -0
- package/dist/server/routes/index.js +13 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/storage/index.d.ts +40 -0
- package/dist/server/storage/index.d.ts.map +1 -0
- package/dist/server/storage/index.js +199 -0
- package/dist/server/storage/index.js.map +1 -0
- package/package.json +109 -0
- package/templates/.env.example +20 -0
- package/templates/docs.config.js +21 -0
package/README.md
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# DocPush
|
|
2
|
+
|
|
3
|
+
Self-hosted, Git-backed collaborative documentation platform.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 📝 **Git-backed** - All docs stored in your GitHub repo
|
|
8
|
+
- 🔐 **Flexible Auth** - Public, magic link, or OAuth
|
|
9
|
+
- ✏️ **Draft System** - Branch-based editing with approval workflow
|
|
10
|
+
- 💬 **Comments** - Collaborative review process
|
|
11
|
+
- ⚛️ **React Components** - Headless UI components for your app
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Install
|
|
17
|
+
npm install @shahadpichen/docpush
|
|
18
|
+
|
|
19
|
+
# Initialize
|
|
20
|
+
npx @shahadpichen/docpush init
|
|
21
|
+
|
|
22
|
+
# Configure docs.config.js and .env
|
|
23
|
+
|
|
24
|
+
# Start
|
|
25
|
+
npx @shahadpichen/docpush start
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Configuration
|
|
29
|
+
|
|
30
|
+
Create `docs.config.js`:
|
|
31
|
+
|
|
32
|
+
```javascript
|
|
33
|
+
module.exports = {
|
|
34
|
+
github: {
|
|
35
|
+
owner: "your-username",
|
|
36
|
+
repo: "your-repo",
|
|
37
|
+
branch: "main",
|
|
38
|
+
docsPath: "docs",
|
|
39
|
+
},
|
|
40
|
+
auth: {
|
|
41
|
+
mode: "public",
|
|
42
|
+
adminPassword: "your-admin-password",
|
|
43
|
+
},
|
|
44
|
+
admins: {
|
|
45
|
+
emails: ["admin@example.com"],
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Create `.env`:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
GITHUB_TOKEN=ghp_your_token
|
|
54
|
+
APP_URL=http://localhost:3000
|
|
55
|
+
SESSION_SECRET=your-secret
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Auth Modes
|
|
59
|
+
|
|
60
|
+
### Public Mode
|
|
61
|
+
|
|
62
|
+
Anyone can submit drafts, admin approves.
|
|
63
|
+
|
|
64
|
+
```javascript
|
|
65
|
+
auth: {
|
|
66
|
+
mode: 'public',
|
|
67
|
+
adminPassword: 'admin123',
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Domain-Restricted Mode
|
|
72
|
+
|
|
73
|
+
Only users with allowed email domains can edit.
|
|
74
|
+
|
|
75
|
+
```javascript
|
|
76
|
+
auth: {
|
|
77
|
+
mode: 'domain-restricted',
|
|
78
|
+
allowedDomains: ['company.com'],
|
|
79
|
+
emailFrom: 'docs@company.com',
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### OAuth Mode
|
|
84
|
+
|
|
85
|
+
GitHub/Google sign-in.
|
|
86
|
+
|
|
87
|
+
```javascript
|
|
88
|
+
auth: {
|
|
89
|
+
mode: 'oauth',
|
|
90
|
+
providers: ['github', 'google'],
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## React Components
|
|
95
|
+
|
|
96
|
+
Import components for your own UI:
|
|
97
|
+
|
|
98
|
+
```tsx
|
|
99
|
+
import {
|
|
100
|
+
DocPushProvider,
|
|
101
|
+
DocsSidebar,
|
|
102
|
+
MarkdownViewer,
|
|
103
|
+
MarkdownEditor,
|
|
104
|
+
useDocs,
|
|
105
|
+
useDrafts,
|
|
106
|
+
} from "docpush/react";
|
|
107
|
+
|
|
108
|
+
function App() {
|
|
109
|
+
return (
|
|
110
|
+
<DocPushProvider config={{ apiUrl: "http://localhost:3000" }}>
|
|
111
|
+
<DocsPage />
|
|
112
|
+
</DocPushProvider>
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## API Endpoints
|
|
118
|
+
|
|
119
|
+
| Endpoint | Description |
|
|
120
|
+
| ------------------------------ | ------------------ |
|
|
121
|
+
| `GET /api/docs/tree` | Get docs file tree |
|
|
122
|
+
| `GET /api/docs/:path` | Get doc content |
|
|
123
|
+
| `GET /api/drafts` | List drafts |
|
|
124
|
+
| `POST /api/drafts` | Create draft |
|
|
125
|
+
| `POST /api/drafts/:id/approve` | Approve draft |
|
|
126
|
+
|
|
127
|
+
## License
|
|
128
|
+
|
|
129
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AA+EA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCjD"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.initCommand = initCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
const WELCOME_TEMPLATE = `# Welcome to Your Documentation
|
|
10
|
+
|
|
11
|
+
This is your first document! Edit it to get started.
|
|
12
|
+
|
|
13
|
+
## Getting Started
|
|
14
|
+
|
|
15
|
+
1. Edit files in the \`docs/\` folder
|
|
16
|
+
2. Changes are saved as drafts (Git branches)
|
|
17
|
+
3. Admins can approve drafts to publish
|
|
18
|
+
|
|
19
|
+
## Configuration
|
|
20
|
+
|
|
21
|
+
Edit \`docs.config.js\` to configure:
|
|
22
|
+
- GitHub repository
|
|
23
|
+
- Authentication mode
|
|
24
|
+
- Admin users
|
|
25
|
+
`;
|
|
26
|
+
const CONFIG_TEMPLATE = `module.exports = {
|
|
27
|
+
// Your GitHub repository
|
|
28
|
+
github: {
|
|
29
|
+
owner: 'your-org', // TODO: Change to your GitHub org/username
|
|
30
|
+
repo: 'your-repo', // TODO: Change to your repository name
|
|
31
|
+
branch: 'main', // Main branch
|
|
32
|
+
docsPath: 'docs' // Path to docs folder
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
// Authentication mode
|
|
36
|
+
auth: {
|
|
37
|
+
mode: 'public', // Options: 'public' | 'domain-restricted' | 'oauth'
|
|
38
|
+
adminPassword: 'changeme' // TODO: Change this password! (for public mode)
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
// Admin users (for domain-restricted and oauth modes)
|
|
42
|
+
admins: {
|
|
43
|
+
emails: ['admin@example.com'] // TODO: Add your admin emails
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
// Optional: Branding
|
|
47
|
+
branding: {
|
|
48
|
+
name: 'Documentation',
|
|
49
|
+
// logo: '/logo.png'
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
`;
|
|
53
|
+
const ENV_TEMPLATE = `# Required
|
|
54
|
+
GITHUB_TOKEN=ghp_your_token_here
|
|
55
|
+
APP_URL=http://localhost:3000
|
|
56
|
+
SESSION_SECRET=generate-random-string-here-change-in-production
|
|
57
|
+
|
|
58
|
+
# Database (optional - uses SQLite if not provided)
|
|
59
|
+
# DATABASE_PATH=./docpush.db
|
|
60
|
+
|
|
61
|
+
# Auth - Domain Restricted (only if using this mode)
|
|
62
|
+
# RESEND_API_KEY=re_your_key_here
|
|
63
|
+
|
|
64
|
+
# Auth - OAuth (only if using this mode)
|
|
65
|
+
# GITHUB_CLIENT_ID=your_client_id
|
|
66
|
+
# GITHUB_CLIENT_SECRET=your_client_secret
|
|
67
|
+
# GOOGLE_CLIENT_ID=your_client_id
|
|
68
|
+
# GOOGLE_CLIENT_SECRET=your_client_secret
|
|
69
|
+
|
|
70
|
+
# Media - S3 (optional)
|
|
71
|
+
# S3_BUCKET=your-bucket
|
|
72
|
+
# AWS_REGION=us-east-1
|
|
73
|
+
# AWS_ACCESS_KEY_ID=your_key
|
|
74
|
+
# AWS_SECRET_ACCESS_KEY=your_secret
|
|
75
|
+
|
|
76
|
+
# Search - Algolia (optional but recommended)
|
|
77
|
+
# NEXT_PUBLIC_ALGOLIA_APP_ID=your_app_id
|
|
78
|
+
# NEXT_PUBLIC_ALGOLIA_SEARCH_KEY=your_search_only_api_key
|
|
79
|
+
# NEXT_PUBLIC_ALGOLIA_INDEX_NAME=your_index_name
|
|
80
|
+
`;
|
|
81
|
+
async function initCommand() {
|
|
82
|
+
console.log(chalk_1.default.blue('🚀 Initializing DocPush...\n'));
|
|
83
|
+
// 1. Create docs folder
|
|
84
|
+
await fs_extra_1.default.ensureDir('./docs');
|
|
85
|
+
await fs_extra_1.default.writeFile('./docs/welcome.md', WELCOME_TEMPLATE);
|
|
86
|
+
console.log(chalk_1.default.green('✓'), 'Created docs/ folder with welcome.md');
|
|
87
|
+
// 2. Create config file
|
|
88
|
+
if (!(await fs_extra_1.default.pathExists('./docs.config.js'))) {
|
|
89
|
+
await fs_extra_1.default.writeFile('./docs.config.js', CONFIG_TEMPLATE);
|
|
90
|
+
console.log(chalk_1.default.green('✓'), 'Created docs.config.js');
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
console.log(chalk_1.default.yellow('⚠'), 'docs.config.js already exists, skipping');
|
|
94
|
+
}
|
|
95
|
+
// 3. Create .env.example
|
|
96
|
+
await fs_extra_1.default.writeFile('./.env.example', ENV_TEMPLATE);
|
|
97
|
+
console.log(chalk_1.default.green('✓'), 'Created .env.example');
|
|
98
|
+
// 4. Update package.json scripts
|
|
99
|
+
const pkgPath = './package.json';
|
|
100
|
+
if (await fs_extra_1.default.pathExists(pkgPath)) {
|
|
101
|
+
const pkg = await fs_extra_1.default.readJson(pkgPath);
|
|
102
|
+
pkg.scripts = {
|
|
103
|
+
...pkg.scripts,
|
|
104
|
+
'docs:dev': 'docpush start',
|
|
105
|
+
'docs:build': 'docpush build',
|
|
106
|
+
};
|
|
107
|
+
await fs_extra_1.default.writeJson(pkgPath, pkg, { spaces: 2 });
|
|
108
|
+
console.log(chalk_1.default.green('✓'), 'Updated package.json scripts');
|
|
109
|
+
}
|
|
110
|
+
console.log(chalk_1.default.blue('\n📝 Next steps:'));
|
|
111
|
+
console.log(' 1. Copy .env.example to .env and fill in values');
|
|
112
|
+
console.log(' 2. Edit docs.config.js with your GitHub repo');
|
|
113
|
+
console.log(' 3. Create a GitHub Personal Access Token with "repo" scope');
|
|
114
|
+
console.log(' 4. Run: npm run docs:dev\n');
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":";;;;;AA+EA,kCAsCC;AApHD,kDAA0B;AAC1B,wDAA0B;AAE1B,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;CAgBxB,CAAC;AAEF,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BvB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BpB,CAAC;AAEK,KAAK,UAAU,WAAW;IAC/B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAExD,wBAAwB;IACxB,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,kBAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,sCAAsC,CAAC,CAAC;IAEtE,wBAAwB;IACxB,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC;QAC/C,MAAM,kBAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,yCAAyC,CAAC,CAAC;IAC5E,CAAC;IAED,yBAAyB;IACzB,MAAM,kBAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,sBAAsB,CAAC,CAAC;IAEtD,iCAAiC;IACjC,MAAM,OAAO,GAAG,gBAAgB,CAAC;IACjC,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvC,GAAG,CAAC,OAAO,GAAG;YACZ,GAAG,GAAG,CAAC,OAAO;YACd,UAAU,EAAE,eAAe;YAC3B,YAAY,EAAE,eAAe;SAC9B,CAAC;QACF,MAAM,kBAAE,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,8BAA8B,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB3E"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.startCommand = startCommand;
|
|
40
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
+
const dotenv_1 = require("dotenv");
|
|
42
|
+
async function startCommand(options) {
|
|
43
|
+
// Load .env file from current working directory
|
|
44
|
+
(0, dotenv_1.config)();
|
|
45
|
+
const port = Number.parseInt(options.port);
|
|
46
|
+
console.log(chalk_1.default.blue('🚀 Starting DocPush...\n'));
|
|
47
|
+
// Dynamically import and start the server
|
|
48
|
+
try {
|
|
49
|
+
const { startServer } = await Promise.resolve().then(() => __importStar(require('../../server')));
|
|
50
|
+
await startServer(port);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
54
|
+
console.error(chalk_1.default.red('❌ Failed to start server:'), message);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,oCAiBC;AApBD,kDAA0B;AAC1B,mCAAgC;AAEzB,KAAK,UAAU,YAAY,CAAC,OAAyB;IAC1D,gDAAgD;IAChD,IAAA,eAAM,GAAE,CAAC;IAET,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEpD,0CAA0C;IAC1C,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,cAAc,GAAC,CAAC;QACrD,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const init_1 = require("./commands/init");
|
|
6
|
+
const start_1 = require("./commands/start");
|
|
7
|
+
const program = new commander_1.Command();
|
|
8
|
+
program
|
|
9
|
+
.name('docpush')
|
|
10
|
+
.description('Self-hosted, Git-backed collaborative documentation platform')
|
|
11
|
+
.version('1.0.0');
|
|
12
|
+
program
|
|
13
|
+
.command('init')
|
|
14
|
+
.description('Initialize DocPush in the current directory')
|
|
15
|
+
.action(init_1.initCommand);
|
|
16
|
+
program
|
|
17
|
+
.command('start')
|
|
18
|
+
.description('Start the DocPush development server')
|
|
19
|
+
.option('-p, --port <port>', 'Port to run on', '3000')
|
|
20
|
+
.action(start_1.startCommand);
|
|
21
|
+
program.parse();
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,4CAAgD;AAEhD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,8DAA8D,CAAC;KAC3E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,CAAC;KACrD,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACnF,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateEnv = exports.configSchema = exports.resetConfigCache = exports.loadConfig = void 0;
|
|
4
|
+
var loader_1 = require("./loader");
|
|
5
|
+
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return loader_1.loadConfig; } });
|
|
6
|
+
Object.defineProperty(exports, "resetConfigCache", { enumerable: true, get: function () { return loader_1.resetConfigCache; } });
|
|
7
|
+
Object.defineProperty(exports, "configSchema", { enumerable: true, get: function () { return loader_1.configSchema; } });
|
|
8
|
+
Object.defineProperty(exports, "validateEnv", { enumerable: true, get: function () { return loader_1.validateEnv; } });
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":";;;AAAA,mCAAmF;AAA1E,oGAAA,UAAU,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,qGAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type DocsConfig } from './schema';
|
|
2
|
+
export declare function loadConfig(configPath?: string): Promise<DocsConfig>;
|
|
3
|
+
export declare function resetConfigCache(): void;
|
|
4
|
+
export { configSchema, type DocsConfig } from './schema';
|
|
5
|
+
export { validateEnv } from './schema';
|
|
6
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAgB,MAAM,UAAU,CAAC;AAIzD,wBAAsB,UAAU,CAAC,UAAU,SAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CA+BrF;AAGD,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAGD,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.validateEnv = exports.configSchema = void 0;
|
|
7
|
+
exports.loadConfig = loadConfig;
|
|
8
|
+
exports.resetConfigCache = resetConfigCache;
|
|
9
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const schema_1 = require("./schema");
|
|
12
|
+
let cachedConfig = null;
|
|
13
|
+
async function loadConfig(configPath = './docs.config.js') {
|
|
14
|
+
if (cachedConfig)
|
|
15
|
+
return cachedConfig;
|
|
16
|
+
const fullPath = node_path_1.default.resolve(process.cwd(), configPath);
|
|
17
|
+
if (!node_fs_1.default.existsSync(fullPath)) {
|
|
18
|
+
throw new Error('docs.config.js not found. Run: npx docpush init');
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
// Clear require cache to pick up changes
|
|
22
|
+
delete require.cache[require.resolve(fullPath)];
|
|
23
|
+
// Dynamic require - works in Node.js
|
|
24
|
+
const userConfig = require(fullPath);
|
|
25
|
+
// Validate with Zod
|
|
26
|
+
cachedConfig = schema_1.configSchema.parse(userConfig);
|
|
27
|
+
return cachedConfig;
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (error instanceof Error && error.name === 'ZodError') {
|
|
31
|
+
console.error('Configuration validation failed:');
|
|
32
|
+
const zodError = error;
|
|
33
|
+
zodError.errors.forEach((err) => {
|
|
34
|
+
console.error(` - ${err.path.join('.')}: ${err.message}`);
|
|
35
|
+
});
|
|
36
|
+
throw new Error('Invalid configuration');
|
|
37
|
+
}
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Reset cache (useful for testing)
|
|
42
|
+
function resetConfigCache() {
|
|
43
|
+
cachedConfig = null;
|
|
44
|
+
}
|
|
45
|
+
// Re-export schema and types
|
|
46
|
+
var schema_2 = require("./schema");
|
|
47
|
+
Object.defineProperty(exports, "configSchema", { enumerable: true, get: function () { return schema_2.configSchema; } });
|
|
48
|
+
var schema_3 = require("./schema");
|
|
49
|
+
Object.defineProperty(exports, "validateEnv", { enumerable: true, get: function () { return schema_3.validateEnv; } });
|
|
50
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":";;;;;;AAMA,gCA+BC;AAGD,4CAEC;AA1CD,sDAAyB;AACzB,0DAA6B;AAC7B,qCAAyD;AAEzD,IAAI,YAAY,GAAsB,IAAI,CAAC;AAEpC,KAAK,UAAU,UAAU,CAAC,UAAU,GAAG,kBAAkB;IAC9D,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,MAAM,QAAQ,GAAG,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAEzD,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC;QACH,yCAAyC;QACzC,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEhD,qCAAqC;QACrC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAErC,oBAAoB;QACpB,YAAY,GAAG,qBAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE9C,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,KAA0E,CAAC;YAC5F,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC9B,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,mCAAmC;AACnC,SAAgB,gBAAgB;IAC9B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AAED,6BAA6B;AAC7B,mCAAyD;AAAhD,sGAAA,YAAY,OAAA;AACrB,mCAAuC;AAA9B,qGAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const configSchema: z.ZodObject<{
|
|
3
|
+
github: z.ZodObject<{
|
|
4
|
+
owner: z.ZodString;
|
|
5
|
+
repo: z.ZodString;
|
|
6
|
+
branch: z.ZodDefault<z.ZodString>;
|
|
7
|
+
docsPath: z.ZodDefault<z.ZodString>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
owner: string;
|
|
10
|
+
repo: string;
|
|
11
|
+
branch: string;
|
|
12
|
+
docsPath: string;
|
|
13
|
+
}, {
|
|
14
|
+
owner: string;
|
|
15
|
+
repo: string;
|
|
16
|
+
branch?: string | undefined;
|
|
17
|
+
docsPath?: string | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
auth: z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{
|
|
20
|
+
mode: z.ZodLiteral<"public">;
|
|
21
|
+
adminPassword: z.ZodString;
|
|
22
|
+
}, "strip", z.ZodTypeAny, {
|
|
23
|
+
mode: "public";
|
|
24
|
+
adminPassword: string;
|
|
25
|
+
}, {
|
|
26
|
+
mode: "public";
|
|
27
|
+
adminPassword: string;
|
|
28
|
+
}>, z.ZodObject<{
|
|
29
|
+
mode: z.ZodLiteral<"domain-restricted">;
|
|
30
|
+
allowedDomains: z.ZodArray<z.ZodString, "many">;
|
|
31
|
+
emailFrom: z.ZodString;
|
|
32
|
+
}, "strip", z.ZodTypeAny, {
|
|
33
|
+
mode: "domain-restricted";
|
|
34
|
+
allowedDomains: string[];
|
|
35
|
+
emailFrom: string;
|
|
36
|
+
}, {
|
|
37
|
+
mode: "domain-restricted";
|
|
38
|
+
allowedDomains: string[];
|
|
39
|
+
emailFrom: string;
|
|
40
|
+
}>, z.ZodObject<{
|
|
41
|
+
mode: z.ZodLiteral<"oauth">;
|
|
42
|
+
providers: z.ZodArray<z.ZodEnum<["github", "google"]>, "many">;
|
|
43
|
+
allowedDomains: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
44
|
+
}, "strip", z.ZodTypeAny, {
|
|
45
|
+
mode: "oauth";
|
|
46
|
+
providers: ("github" | "google")[];
|
|
47
|
+
allowedDomains?: string[] | undefined;
|
|
48
|
+
}, {
|
|
49
|
+
mode: "oauth";
|
|
50
|
+
providers: ("github" | "google")[];
|
|
51
|
+
allowedDomains?: string[] | undefined;
|
|
52
|
+
}>]>;
|
|
53
|
+
admins: z.ZodObject<{
|
|
54
|
+
emails: z.ZodArray<z.ZodString, "many">;
|
|
55
|
+
}, "strip", z.ZodTypeAny, {
|
|
56
|
+
emails: string[];
|
|
57
|
+
}, {
|
|
58
|
+
emails: string[];
|
|
59
|
+
}>;
|
|
60
|
+
branding: z.ZodOptional<z.ZodObject<{
|
|
61
|
+
name: z.ZodDefault<z.ZodString>;
|
|
62
|
+
logo: z.ZodOptional<z.ZodString>;
|
|
63
|
+
}, "strip", z.ZodTypeAny, {
|
|
64
|
+
name: string;
|
|
65
|
+
logo?: string | undefined;
|
|
66
|
+
}, {
|
|
67
|
+
name?: string | undefined;
|
|
68
|
+
logo?: string | undefined;
|
|
69
|
+
}>>;
|
|
70
|
+
}, "strip", z.ZodTypeAny, {
|
|
71
|
+
github: {
|
|
72
|
+
owner: string;
|
|
73
|
+
repo: string;
|
|
74
|
+
branch: string;
|
|
75
|
+
docsPath: string;
|
|
76
|
+
};
|
|
77
|
+
auth: {
|
|
78
|
+
mode: "public";
|
|
79
|
+
adminPassword: string;
|
|
80
|
+
} | {
|
|
81
|
+
mode: "domain-restricted";
|
|
82
|
+
allowedDomains: string[];
|
|
83
|
+
emailFrom: string;
|
|
84
|
+
} | {
|
|
85
|
+
mode: "oauth";
|
|
86
|
+
providers: ("github" | "google")[];
|
|
87
|
+
allowedDomains?: string[] | undefined;
|
|
88
|
+
};
|
|
89
|
+
admins: {
|
|
90
|
+
emails: string[];
|
|
91
|
+
};
|
|
92
|
+
branding?: {
|
|
93
|
+
name: string;
|
|
94
|
+
logo?: string | undefined;
|
|
95
|
+
} | undefined;
|
|
96
|
+
}, {
|
|
97
|
+
github: {
|
|
98
|
+
owner: string;
|
|
99
|
+
repo: string;
|
|
100
|
+
branch?: string | undefined;
|
|
101
|
+
docsPath?: string | undefined;
|
|
102
|
+
};
|
|
103
|
+
auth: {
|
|
104
|
+
mode: "public";
|
|
105
|
+
adminPassword: string;
|
|
106
|
+
} | {
|
|
107
|
+
mode: "domain-restricted";
|
|
108
|
+
allowedDomains: string[];
|
|
109
|
+
emailFrom: string;
|
|
110
|
+
} | {
|
|
111
|
+
mode: "oauth";
|
|
112
|
+
providers: ("github" | "google")[];
|
|
113
|
+
allowedDomains?: string[] | undefined;
|
|
114
|
+
};
|
|
115
|
+
admins: {
|
|
116
|
+
emails: string[];
|
|
117
|
+
};
|
|
118
|
+
branding?: {
|
|
119
|
+
name?: string | undefined;
|
|
120
|
+
logo?: string | undefined;
|
|
121
|
+
} | undefined;
|
|
122
|
+
}>;
|
|
123
|
+
export type DocsConfig = z.infer<typeof configSchema>;
|
|
124
|
+
interface EnvValidationResult {
|
|
125
|
+
valid: boolean;
|
|
126
|
+
missing: string[];
|
|
127
|
+
warnings: string[];
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Validate environment variables with detailed feedback
|
|
131
|
+
*/
|
|
132
|
+
export declare function validateEnv(config?: DocsConfig): EnvValidationResult;
|
|
133
|
+
export {};
|
|
134
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/core/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoBxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BvB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAEtD,UAAU,mBAAmB;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,mBAAmB,CA+DpE"}
|