@asafarim/direxpo-server 0.2.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 +120 -0
- package/dist/dev-server.d.ts +2 -0
- package/dist/dev-server.d.ts.map +1 -0
- package/dist/dev-server.js +11 -0
- package/dist/dev-server.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/router.d.ts +9 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +174 -0
- package/dist/router.js.map +1 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +45 -0
package/README.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# @asafarim/direxpo-server
|
|
2
|
+
|
|
3
|
+
Express API wrapper for MD Exporter with tree generation capabilities.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Express Router**: Ready-to-use API endpoints
|
|
8
|
+
- **Tree Integration**: Automatic folder structure generation
|
|
9
|
+
- **File Management**: Download and open exported files
|
|
10
|
+
- **Tree-Only Export**: Export just the folder structure
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pnpm add @asafarim/direxpo-server
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
### Basic Setup
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import express from 'express';
|
|
24
|
+
import { createDirexpoRouter } from '@asafarim/direxpo-server';
|
|
25
|
+
|
|
26
|
+
const app = express();
|
|
27
|
+
app.use(express.json());
|
|
28
|
+
|
|
29
|
+
const { router } = createDirexpoRouter({ outputDir: '.output' });
|
|
30
|
+
app.use('/api', router);
|
|
31
|
+
|
|
32
|
+
app.listen(5199, () => {
|
|
33
|
+
console.log('Server running on http://localhost:5199');
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## API Endpoints
|
|
38
|
+
|
|
39
|
+
### POST `/api/run`
|
|
40
|
+
|
|
41
|
+
Export files to markdown.
|
|
42
|
+
|
|
43
|
+
**Request Body:**
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"options": {
|
|
47
|
+
"targetPath": "./src",
|
|
48
|
+
"filter": "tsx",
|
|
49
|
+
"exclude": ["tests"],
|
|
50
|
+
"maxSize": 5,
|
|
51
|
+
"includeTree": true,
|
|
52
|
+
"treeOnly": false
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Response:**
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"outputPath": "/path/to/output.md",
|
|
61
|
+
"report": {
|
|
62
|
+
"included": 42,
|
|
63
|
+
"bytesWritten": 123456
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### POST `/api/discover`
|
|
69
|
+
|
|
70
|
+
Discover files without exporting.
|
|
71
|
+
|
|
72
|
+
**Request Body:**
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"options": {
|
|
76
|
+
"targetPath": "./src",
|
|
77
|
+
"filter": "tsx"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Response:**
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"files": ["src/index.ts", "src/app.tsx"]
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### GET `/api/download/:filename`
|
|
90
|
+
|
|
91
|
+
Download an exported markdown file.
|
|
92
|
+
|
|
93
|
+
### POST `/api/open-file`
|
|
94
|
+
|
|
95
|
+
Open an exported file in the default application.
|
|
96
|
+
|
|
97
|
+
**Request Body:**
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"filename": "export_20240106.md"
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Options
|
|
105
|
+
|
|
106
|
+
### DirexpoRunOptions
|
|
107
|
+
|
|
108
|
+
Extends `ExportOptions` from `@asafarim/md-exporter` with:
|
|
109
|
+
|
|
110
|
+
- `includeTree?: boolean` - Prepend folder structure to export
|
|
111
|
+
- `treeOnly?: boolean` - Export only the folder structure
|
|
112
|
+
- `filePaths?: string[]` - Pre-discovered file paths
|
|
113
|
+
|
|
114
|
+
### DirexpoServerOptions
|
|
115
|
+
|
|
116
|
+
- `outputDir?: string` - Output directory (default: `.output`)
|
|
117
|
+
|
|
118
|
+
## License
|
|
119
|
+
|
|
120
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../src/dev-server.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import express from "express";
|
|
2
|
+
import { createDirexpoRouter } from "./router.js";
|
|
3
|
+
const app = express();
|
|
4
|
+
app.use(express.json());
|
|
5
|
+
const { router } = createDirexpoRouter({ outputDir: ".output" });
|
|
6
|
+
app.use("/api", router);
|
|
7
|
+
const PORT = 5199;
|
|
8
|
+
app.listen(PORT, () => {
|
|
9
|
+
console.log(`direxpo-server running on http://localhost:${PORT}`);
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=dev-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-server.js","sourceRoot":"","sources":["../src/dev-server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AACtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAExB,MAAM,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;AACjE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExB,MAAM,IAAI,GAAG,IAAI,CAAC;AAClB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACpB,OAAO,CAAC,GAAG,CAAC,8CAA8C,IAAI,EAAE,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/router.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Router } from "express";
|
|
2
|
+
import type { DirexpoServerOptions } from "./types.js";
|
|
3
|
+
type DirexpoRouterResult = {
|
|
4
|
+
router: Router;
|
|
5
|
+
outputDir: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function createDirexpoRouter(opts?: DirexpoServerOptions): DirexpoRouterResult;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAM/C,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAK1E,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAyDF,wBAAgB,mBAAmB,CACjC,IAAI,GAAE,oBAAyB,GAC9B,mBAAmB,CA4IrB"}
|
package/dist/router.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import express from "express";
|
|
2
|
+
import { runExport } from "@asafarim/md-exporter";
|
|
3
|
+
import { readFile, writeFile, mkdir } from "fs/promises";
|
|
4
|
+
import { join, resolve } from "path";
|
|
5
|
+
import { exec } from "child_process";
|
|
6
|
+
import { promisify } from "util";
|
|
7
|
+
import { discoverFiles, generateTreeSection } from "@asafarim/direxpo-core";
|
|
8
|
+
const execAsync = promisify(exec);
|
|
9
|
+
function normalizeOptions(input) {
|
|
10
|
+
const normalized = {
|
|
11
|
+
targetPath: input.targetPath,
|
|
12
|
+
};
|
|
13
|
+
if (input.filter) {
|
|
14
|
+
normalized.filter = input.filter;
|
|
15
|
+
}
|
|
16
|
+
if (input.pattern && typeof input.pattern === "string" && input.pattern.trim()) {
|
|
17
|
+
normalized.pattern = input.pattern.trim();
|
|
18
|
+
if (!input.filter) {
|
|
19
|
+
normalized.filter = "glob";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (input.exclude) {
|
|
23
|
+
let excludeArray = [];
|
|
24
|
+
if (typeof input.exclude === "string") {
|
|
25
|
+
excludeArray = input.exclude
|
|
26
|
+
.split(/[,\n]+/)
|
|
27
|
+
.map((s) => s.trim())
|
|
28
|
+
.filter((s) => s.length > 0);
|
|
29
|
+
}
|
|
30
|
+
else if (Array.isArray(input.exclude)) {
|
|
31
|
+
excludeArray = input.exclude
|
|
32
|
+
.map((s) => (typeof s === "string" ? s.trim() : ""))
|
|
33
|
+
.filter((s) => s.length > 0);
|
|
34
|
+
}
|
|
35
|
+
if (excludeArray.length > 0) {
|
|
36
|
+
normalized.exclude = excludeArray;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
let maxSizeBytes = 0;
|
|
40
|
+
if (input.maxSizeMb !== undefined && typeof input.maxSizeMb === "number") {
|
|
41
|
+
maxSizeBytes = input.maxSizeMb;
|
|
42
|
+
}
|
|
43
|
+
else if (input.maxSize !== undefined && typeof input.maxSize === "number") {
|
|
44
|
+
maxSizeBytes = input.maxSize / (1024 * 1024);
|
|
45
|
+
}
|
|
46
|
+
if (maxSizeBytes > 0 && isFinite(maxSizeBytes)) {
|
|
47
|
+
normalized.maxSize = maxSizeBytes;
|
|
48
|
+
}
|
|
49
|
+
return normalized;
|
|
50
|
+
}
|
|
51
|
+
export function createDirexpoRouter(opts = {}) {
|
|
52
|
+
const router = express.Router();
|
|
53
|
+
const OUTPUT_DIR = resolve(opts.outputDir ?? join(process.cwd(), ".output"));
|
|
54
|
+
mkdir(OUTPUT_DIR, { recursive: true }).catch(() => {
|
|
55
|
+
// ignore
|
|
56
|
+
});
|
|
57
|
+
router.post("/run", async (req, res) => {
|
|
58
|
+
try {
|
|
59
|
+
const { options } = req.body;
|
|
60
|
+
const { includeTree, treeOnly, filePaths, ...baseOptions } = options;
|
|
61
|
+
// Tree-only: produce markdown that contains only the tree
|
|
62
|
+
if (treeOnly) {
|
|
63
|
+
const normalizedOpts = normalizeOptions(baseOptions);
|
|
64
|
+
const paths = filePaths && filePaths.length
|
|
65
|
+
? filePaths
|
|
66
|
+
: await discoverFiles(normalizedOpts);
|
|
67
|
+
const treeSection = generateTreeSection(paths, baseOptions.targetPath);
|
|
68
|
+
const timestamp = new Date()
|
|
69
|
+
.toISOString()
|
|
70
|
+
.replace(/[:.]/g, "")
|
|
71
|
+
.slice(0, -5);
|
|
72
|
+
const filename = `tree_${timestamp}.md`;
|
|
73
|
+
const outputPath = join(OUTPUT_DIR, filename);
|
|
74
|
+
await writeFile(outputPath, treeSection, "utf-8");
|
|
75
|
+
res.json({
|
|
76
|
+
outputPath,
|
|
77
|
+
report: {
|
|
78
|
+
included: paths.length,
|
|
79
|
+
bytesWritten: treeSection.length,
|
|
80
|
+
treeOnly: true,
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// Normal export
|
|
86
|
+
const normalizedOpts = normalizeOptions(baseOptions);
|
|
87
|
+
const result = await runExport({
|
|
88
|
+
...normalizedOpts,
|
|
89
|
+
outDir: OUTPUT_DIR,
|
|
90
|
+
});
|
|
91
|
+
// Prepend tree if requested
|
|
92
|
+
if (includeTree && result.outputMarkdownPath) {
|
|
93
|
+
const paths = filePaths && filePaths.length
|
|
94
|
+
? filePaths
|
|
95
|
+
: await discoverFiles(normalizedOpts);
|
|
96
|
+
if (paths.length) {
|
|
97
|
+
try {
|
|
98
|
+
const markdownContent = await readFile(result.outputMarkdownPath, "utf-8");
|
|
99
|
+
const treeSection = generateTreeSection(paths, baseOptions.targetPath);
|
|
100
|
+
if (treeSection) {
|
|
101
|
+
await writeFile(result.outputMarkdownPath, treeSection + "\n" + markdownContent, "utf-8");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// ignore tree failure
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
res.json({
|
|
110
|
+
outputPath: result.outputMarkdownPath,
|
|
111
|
+
report: result.report,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
res.status(500).json({
|
|
116
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
router.post("/discover", async (req, res) => {
|
|
121
|
+
try {
|
|
122
|
+
const { options } = req.body;
|
|
123
|
+
const normalizedOpts = normalizeOptions(options);
|
|
124
|
+
const files = await discoverFiles(normalizedOpts);
|
|
125
|
+
res.json({ files });
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
res.status(500).json({
|
|
129
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
router.get("/download/:filename", async (req, res) => {
|
|
134
|
+
try {
|
|
135
|
+
const { filename } = req.params;
|
|
136
|
+
const filepath = join(OUTPUT_DIR, filename);
|
|
137
|
+
const content = await readFile(filepath, "utf-8");
|
|
138
|
+
res.setHeader("Content-Type", "text/markdown");
|
|
139
|
+
res.setHeader("Content-Disposition", `attachment; filename="${filename}"`);
|
|
140
|
+
res.send(content);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
res.status(404).json({ error: "File not found" });
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
router.post("/open-file", async (req, res) => {
|
|
147
|
+
try {
|
|
148
|
+
const { filename } = req.body;
|
|
149
|
+
const filepath = join(OUTPUT_DIR, filename);
|
|
150
|
+
await readFile(filepath, "utf-8");
|
|
151
|
+
const isWindows = process.platform === "win32";
|
|
152
|
+
const isMac = process.platform === "darwin";
|
|
153
|
+
const isLinux = process.platform === "linux";
|
|
154
|
+
let command;
|
|
155
|
+
if (isWindows)
|
|
156
|
+
command = `start "" "${filepath}"`;
|
|
157
|
+
else if (isMac)
|
|
158
|
+
command = `open "${filepath}"`;
|
|
159
|
+
else if (isLinux)
|
|
160
|
+
command = `xdg-open "${filepath}"`;
|
|
161
|
+
else
|
|
162
|
+
throw new Error("Unsupported operating system");
|
|
163
|
+
await execAsync(command);
|
|
164
|
+
res.json({ success: true });
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
res.status(500).json({
|
|
168
|
+
error: error instanceof Error ? error.message : "Failed to open file",
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
return { router, outputDir: OUTPUT_DIR };
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ExportOptions } from "@asafarim/md-exporter";
|
|
2
|
+
export interface DirexpoRunOptions extends ExportOptions {
|
|
3
|
+
includeTree?: boolean;
|
|
4
|
+
treeOnly?: boolean;
|
|
5
|
+
filePaths?: string[];
|
|
6
|
+
}
|
|
7
|
+
export interface DirexpoServerOptions {
|
|
8
|
+
outputDir?: string;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@asafarim/direxpo-server",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": {
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"default": "./dist/index.js"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@asafarim/md-exporter": "0.2.3",
|
|
16
|
+
"@asafarim/direxpo-core": "^0.4.0",
|
|
17
|
+
"express": "^4.18.2"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@types/express": "^4.17.21",
|
|
21
|
+
"@types/node": "^20.10.6",
|
|
22
|
+
"tsx": "^4.7.0",
|
|
23
|
+
"typescript": "^5.3.3",
|
|
24
|
+
"gh-pages": "^6.3.0",
|
|
25
|
+
"concurrently": "^8.2.2"
|
|
26
|
+
},
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "https://github.com/AliSafari-IT/direxpo-server.git"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"author": "Ali Safari",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "tsc -p tsconfig.json",
|
|
38
|
+
"dev": "tsx src/dev-server.ts",
|
|
39
|
+
"demo": "pnpm run build && pnpm --filter direxpo-server-demo dev",
|
|
40
|
+
"deploy:demo": "gh-pages -d demo/dist",
|
|
41
|
+
"deploy": "pnpm run deploy:demo",
|
|
42
|
+
"release": "node scripts/release.js",
|
|
43
|
+
"start": "concurrently \"pnpm run dev\" \"pnpm run demo\""
|
|
44
|
+
}
|
|
45
|
+
}
|