@heilgar/file-storage-adapter-fs 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.
@@ -0,0 +1,27 @@
1
+ import { BaseAdapter, DownloadOptions, FileMetadata, FileObject, FileStorageAdapterConfig, ListOptions, ListResult, SignedUrlOptions, UploadOptions } from '@heilgar/file-storage-adapter-core';
2
+ export interface FsAdapterConfig extends FileStorageAdapterConfig {
3
+ rootDir: string;
4
+ baseUrl?: string;
5
+ }
6
+ export declare class FsAdapter extends BaseAdapter {
7
+ private rootDir;
8
+ private baseUrl?;
9
+ constructor(config: FsAdapterConfig);
10
+ private getFilePath;
11
+ private getMetadataPath;
12
+ private ensureDir;
13
+ upload(key: string, file: Buffer | NodeJS.ReadableStream | File, options?: UploadOptions): Promise<FileMetadata>;
14
+ download(key: string, options?: DownloadOptions): Promise<FileObject>;
15
+ getMetadata(key: string): Promise<FileMetadata | null>;
16
+ delete(key: string): Promise<boolean>;
17
+ exists(key: string): Promise<boolean>;
18
+ list(options?: ListOptions): Promise<ListResult>;
19
+ getSignedUrl(key: string, options: SignedUrlOptions): Promise<string>;
20
+ getSignedUrlUpload(key: string, options: SignedUrlOptions): Promise<{
21
+ url: string;
22
+ headers?: Record<string, string>;
23
+ }>;
24
+ copy(sourceKey: string, destinationKey: string): Promise<FileMetadata>;
25
+ move(sourceKey: string, destinationKey: string): Promise<FileMetadata>;
26
+ }
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,eAAe,EACf,YAAY,EACZ,UAAU,EACV,wBAAwB,EACxB,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAK5C,MAAM,WAAW,eAAgB,SAAQ,wBAAwB;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,SAAU,SAAQ,WAAW;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAC,CAAS;gBAEb,MAAM,EAAE,eAAe;IAOnC,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,eAAe;YAIT,SAAS;IAKjB,MAAM,CACV,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,GAAG,IAAI,EAC3C,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,CAAC;IAsBlB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAoCrE,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAwBtD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUrC,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IA0CpD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IASrE,kBAAkB,CACtB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAIvD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAwBtE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAK7E"}
package/dist/index.js ADDED
@@ -0,0 +1,192 @@
1
+ import { BaseAdapter, } from '@heilgar/file-storage-adapter-core';
2
+ import { createReadStream, promises as fs } from 'node:fs';
3
+ import { dirname, join, relative } from 'node:path';
4
+ import { lookup } from 'mime-types';
5
+ export class FsAdapter extends BaseAdapter {
6
+ constructor(config) {
7
+ super(config);
8
+ this.rootDir = config.rootDir;
9
+ this.baseUrl = config.baseUrl;
10
+ }
11
+ getFilePath(key) {
12
+ const fullKey = this.getFullKey(key);
13
+ return join(this.rootDir, fullKey);
14
+ }
15
+ getMetadataPath(key) {
16
+ return `${this.getFilePath(key)}.meta.json`;
17
+ }
18
+ async ensureDir(filePath) {
19
+ const dir = dirname(filePath);
20
+ await fs.mkdir(dir, { recursive: true });
21
+ }
22
+ async upload(key, file, options) {
23
+ const filePath = this.getFilePath(key);
24
+ await this.ensureDir(filePath);
25
+ const buffer = await this.toBuffer(file);
26
+ await fs.writeFile(filePath, buffer);
27
+ const stat = await fs.stat(filePath);
28
+ const metadata = {
29
+ name: key.split('/').pop() || key,
30
+ mimeType: options?.contentType || lookup(key) || 'application/octet-stream',
31
+ size: stat.size,
32
+ uploadedAt: new Date(),
33
+ metadata: options?.metadata,
34
+ };
35
+ const metadataPath = this.getMetadataPath(key);
36
+ await fs.writeFile(metadataPath, JSON.stringify(metadata, null, 2));
37
+ return metadata;
38
+ }
39
+ async download(key, options) {
40
+ const filePath = this.getFilePath(key);
41
+ const metadataPath = this.getMetadataPath(key);
42
+ let content;
43
+ if (options?.range) {
44
+ const { start, end } = options.range;
45
+ const stream = createReadStream(filePath, { start, end });
46
+ content = await this.toBuffer(stream);
47
+ }
48
+ else {
49
+ content = await fs.readFile(filePath);
50
+ }
51
+ let metadata;
52
+ try {
53
+ const metaContent = await fs.readFile(metadataPath, 'utf-8');
54
+ metadata = JSON.parse(metaContent);
55
+ metadata.uploadedAt = new Date(metadata.uploadedAt);
56
+ }
57
+ catch {
58
+ // Fallback if metadata doesn't exist
59
+ const stats = await fs.stat(filePath);
60
+ metadata = {
61
+ name: key.split('/').pop() || key,
62
+ mimeType: lookup(key) || 'application/octet-stream',
63
+ size: stats.size,
64
+ uploadedAt: stats.mtime,
65
+ };
66
+ }
67
+ return {
68
+ ...metadata,
69
+ content,
70
+ };
71
+ }
72
+ async getMetadata(key) {
73
+ try {
74
+ const metadataPath = this.getMetadataPath(key);
75
+ const content = await fs.readFile(metadataPath, 'utf-8');
76
+ const metadata = JSON.parse(content);
77
+ metadata.uploadedAt = new Date(metadata.uploadedAt);
78
+ return metadata;
79
+ }
80
+ catch {
81
+ // Try to get basic metadata from file stats
82
+ try {
83
+ const filePath = this.getFilePath(key);
84
+ const stats = await fs.stat(filePath);
85
+ return {
86
+ name: key.split('/').pop() || key,
87
+ mimeType: lookup(key) || 'application/octet-stream',
88
+ size: stats.size,
89
+ uploadedAt: stats.mtime,
90
+ };
91
+ }
92
+ catch {
93
+ return null;
94
+ }
95
+ }
96
+ }
97
+ async delete(key) {
98
+ try {
99
+ const filePath = this.getFilePath(key);
100
+ const metadataPath = this.getMetadataPath(key);
101
+ await fs.unlink(filePath);
102
+ await fs.unlink(metadataPath).catch(() => { }); // Ignore if metadata doesn't exist
103
+ return true;
104
+ }
105
+ catch {
106
+ return false;
107
+ }
108
+ }
109
+ async exists(key) {
110
+ try {
111
+ const filePath = this.getFilePath(key);
112
+ await fs.access(filePath);
113
+ return true;
114
+ }
115
+ catch {
116
+ return false;
117
+ }
118
+ }
119
+ async list(options = {}) {
120
+ const { prefix = '', limit = 1000 } = options;
121
+ const files = [];
122
+ const searchDir = prefix
123
+ ? join(this.rootDir, this.getFullKey(prefix))
124
+ : join(this.rootDir, this.config.basePath || '');
125
+ const walkDir = async (dir) => {
126
+ try {
127
+ const entries = await fs.readdir(dir, { withFileTypes: true });
128
+ for (const entry of entries) {
129
+ if (files.length >= limit)
130
+ break;
131
+ const fullPath = join(dir, entry.name);
132
+ if (entry.isDirectory()) {
133
+ await walkDir(fullPath);
134
+ }
135
+ else if (entry.isFile() && !entry.name.endsWith('.meta.json')) {
136
+ const relativePath = relative(this.rootDir, fullPath);
137
+ const key = this.stripBasePath(relativePath);
138
+ const metadata = await this.getMetadata(key);
139
+ if (metadata) {
140
+ files.push(metadata);
141
+ }
142
+ }
143
+ }
144
+ }
145
+ catch {
146
+ // Directory doesn't exist or not accessible
147
+ }
148
+ };
149
+ await walkDir(searchDir);
150
+ return {
151
+ files,
152
+ hasMore: false, // Filesystem adapter loads all at once
153
+ };
154
+ }
155
+ async getSignedUrl(key, options) {
156
+ // Filesystem doesn't support signed URLs, return public URL if baseUrl is set
157
+ if (this.baseUrl) {
158
+ const fullKey = this.getFullKey(key);
159
+ return `${this.baseUrl}/${fullKey}`;
160
+ }
161
+ throw new Error('baseUrl not configured for FsAdapter');
162
+ }
163
+ async getSignedUrlUpload(key, options) {
164
+ throw new Error('Signed upload URLs not supported for filesystem adapter');
165
+ }
166
+ async copy(sourceKey, destinationKey) {
167
+ const sourcePath = this.getFilePath(sourceKey);
168
+ const destPath = this.getFilePath(destinationKey);
169
+ await this.ensureDir(destPath);
170
+ await fs.copyFile(sourcePath, destPath);
171
+ // Copy metadata
172
+ const sourceMetaPath = this.getMetadataPath(sourceKey);
173
+ const destMetaPath = this.getMetadataPath(destinationKey);
174
+ try {
175
+ await fs.copyFile(sourceMetaPath, destMetaPath);
176
+ }
177
+ catch {
178
+ // Metadata doesn't exist, create new
179
+ }
180
+ const metadata = await this.getMetadata(destinationKey);
181
+ if (!metadata) {
182
+ throw new Error('Failed to copy file');
183
+ }
184
+ return metadata;
185
+ }
186
+ async move(sourceKey, destinationKey) {
187
+ const metadata = await this.copy(sourceKey, destinationKey);
188
+ await this.delete(sourceKey);
189
+ return metadata;
190
+ }
191
+ }
192
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@heilgar/file-storage-adapter-fs",
3
+ "version": "1.0.0",
4
+ "description": "Filesystem storage adapter",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc --build",
20
+ "test": "vitest run",
21
+ "test:watch": "vitest"
22
+ },
23
+ "keywords": [
24
+ "storage",
25
+ "filesystem",
26
+ "files"
27
+ ],
28
+ "author": "Oleh Hrebeniuk",
29
+ "license": "MIT",
30
+ "peerDependencies": {
31
+ "@heilgar/file-storage-adapter-core": "^1.0.0"
32
+ },
33
+ "devDependencies": {
34
+ "@heilgar/file-storage-adapter-core": "*",
35
+ "@types/mime-types": "^3.0.1"
36
+ },
37
+ "dependencies": {
38
+ "mime-types": "^3.0.2"
39
+ }
40
+ }