3 Commits
Author SHA1 Message Date
sugoidogo 1cc6906cc9 switch from @types/web to web-filesystem-types
Release / release (push) Successful in 22s
2026-01-20 07:46:16 -08:00
sugoidogo 4884247282 fix imports for node 20+
Release / release (push) Successful in 23s
2025-12-31 02:20:58 -08:00
sugoidogo 1fa35ba82e include mime type in getFile
Release / release (push) Successful in 24s
2025-12-30 12:03:26 -08:00
6 changed files with 44 additions and 24 deletions
+26 -14
View File
@@ -1,36 +1,48 @@
{ {
"name": "node-file-system-adapter", "name": "@sugoidogo/node-file-system-adapter",
"version": "0.0.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "node-file-system-adapter", "name": "@sugoidogo/node-file-system-adapter",
"version": "0.0.0",
"dependencies": { "dependencies": {
"mime": "^4.1.0" "mime": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^25.0.3", "@sugoidogo/web-filesystem-types": "^2.0.0",
"@types/web": "^0.0.310", "@types/node": "^25.0.9",
"typescript": "^5.9.3" "typescript": "^5.9.3"
} }
}, },
"node_modules/@sugoidogo/node-web-globals": {
"version": "1.0.0",
"resolved": "https://gitea.sugoidogo.com/api/packages/sugoidogo/npm/%40sugoidogo%2Fnode-web-globals/-/1.0.0/node-web-globals-1.0.0.tgz",
"integrity": "sha512-mE2yB2h2Vg8I+0zkcFHLUZgH+dbpb03e5Zwn+cDeXFRnj/nb/mLCIxXc9OeKUSH06PYyOGtH76XKKwGzey9TnA==",
"dev": true,
"license": "MIT"
},
"node_modules/@sugoidogo/web-filesystem-types": {
"version": "2.0.0",
"resolved": "https://gitea.sugoidogo.com/api/packages/sugoidogo/npm/%40sugoidogo%2Fweb-filesystem-types/-/2.0.0/web-filesystem-types-2.0.0.tgz",
"integrity": "sha512-ET5F+WlqNZnskgbSACG1flLAKftJBehLPiQgRtUotuh2+pSqIGrHHQT5KC2v6b5/3LM47K1Zjm8GFcJpmXEjmw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@sugoidogo/node-web-globals": "^1.0.0"
}
},
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "25.0.3", "version": "25.0.9",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.9.tgz",
"integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "integrity": "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"undici-types": "~7.16.0" "undici-types": "~7.16.0"
} }
}, },
"node_modules/@types/web": {
"version": "0.0.310",
"resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.310.tgz",
"integrity": "sha512-XN++V7UZGEeRg8MXJBkzMqmcAWoCRN1UV/zpQxg9YnJQ9pIPSuzEG7oidC+nXi/J8pmfb3UgFv+TjEDzMiNnRg==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/mime": { "node_modules/mime": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz",
+3 -2
View File
@@ -1,5 +1,6 @@
{ {
"name": "@sugoidogo/node-file-system-adapter", "name": "@sugoidogo/node-file-system-adapter",
"version": "0.0.0",
"main": "dist/NodeFileSystemDirectoryHandle.js", "main": "dist/NodeFileSystemDirectoryHandle.js",
"files": [ "files": [
"dist", "dist",
@@ -15,8 +16,8 @@
"mime": "^4.1.0" "mime": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^25.0.3", "@sugoidogo/web-filesystem-types": "^2.0.0",
"@types/web": "^0.0.310", "@types/node": "^25.0.9",
"typescript": "^5.9.3" "typescript": "^5.9.3"
} }
} }
+2 -2
View File
@@ -7,8 +7,8 @@ const writable = await file_handle.createWritable()
writable.write('Hello World!') writable.write('Hello World!')
writable.close() writable.close()
const file = await file_handle.getFile() const file = await file_handle.getFile()
const file_text = await file.text() console.log(file.type)
console.log(file_text) console.log(await file.text())
const result = await cwd_directory_handle.getFileHandle('test/test.txt').catch(error => 'blocked path traversal') const result = await cwd_directory_handle.getFileHandle('test/test.txt').catch(error => 'blocked path traversal')
if (typeof result === 'string') console.log(result) if (typeof result === 'string') console.log(result)
else console.error('path traversal not blocked') else console.error('path traversal not blocked')
+2 -2
View File
@@ -1,8 +1,8 @@
import * as fs from 'node:fs'; import * as fs from 'node:fs';
import * as asyncfs from 'node:fs/promises'; import * as asyncfs from 'node:fs/promises';
import * as path from 'node:path'; import * as path from 'node:path';
import NodeFileSystemHandle from './NodeFileSystemHandle.js'; import NodeFileSystemHandle from './NodeFileSystemHandle.ts';
import NodeFileSystemFileHandle from './NodeFileSystemFileHandle.js'; import NodeFileSystemFileHandle from './NodeFileSystemFileHandle.ts';
export default class NodeFileSystemDirectoryHandle extends NodeFileSystemHandle implements FileSystemDirectoryHandle { export default class NodeFileSystemDirectoryHandle extends NodeFileSystemHandle implements FileSystemDirectoryHandle {
declare kind: "directory"; declare kind: "directory";
+5 -3
View File
@@ -1,8 +1,9 @@
import * as fs from 'node:fs'; import * as fs from 'node:fs';
import * as asyncfs from 'node:fs/promises'; import * as asyncfs from 'node:fs/promises';
import * as path from 'node:path'; import * as path from 'node:path';
import NodeFileSystemHandle from './NodeFileSystemHandle.js'; import NodeFileSystemHandle from './NodeFileSystemHandle.ts';
import NodeFileSystemWritableFileStream from './NodeFileSystemWriteableFileStream.js'; import NodeFileSystemWritableFileStream from './NodeFileSystemWriteableFileStream.ts';
import mime from 'mime'
export default class NodeFileSystemFileHandle extends NodeFileSystemHandle implements FileSystemFileHandle { export default class NodeFileSystemFileHandle extends NodeFileSystemHandle implements FileSystemFileHandle {
declare kind: "file"; declare kind: "file";
@@ -18,7 +19,8 @@ export default class NodeFileSystemFileHandle extends NodeFileSystemHandle imple
} }
async getFile(): Promise<File> { async getFile(): Promise<File> {
const stats = await asyncfs.stat(this.path) const stats = await asyncfs.stat(this.path)
return asyncfs.readFile(this.path).then(buffer => Object.assign(new Blob([buffer]), { const type = mime.getType(this.name.split('.').pop())
return asyncfs.readFile(this.path).then(buffer => Object.assign(new Blob([buffer],{type}), {
lastModified: stats.mtimeMs, lastModified: stats.mtimeMs,
name: this.path, name: this.path,
webkitRelativePath: this.path webkitRelativePath: this.path
+6 -1
View File
@@ -3,11 +3,16 @@
"target": "es2022", "target": "es2022",
"module": "es2022", "module": "es2022",
"lib": ["ES2022"], "lib": ["ES2022"],
"types": [
"node",
"@sugoidogo/web-filesystem-types"
],
"moduleResolution": "node", "moduleResolution": "node",
"sourceMap": true, "sourceMap": true,
"declaration": true, "declaration": true,
"declarationMap": true, "declarationMap": true,
"outDir": "dist" "outDir": "dist",
"rewriteRelativeImportExtensions": true
}, },
"include": ["src"] "include": ["src"]
} }