@miniflare/storage-file
Advanced tools
Comparing version 2.6.0-d1.1 to 2.6.0
import { Clock } from '@miniflare/shared'; | ||
import Database from 'better-sqlite3'; | ||
import { LocalStorage } from '@miniflare/storage-memory'; | ||
import { MiniflareError } from '@miniflare/shared'; | ||
import { Range } from '@miniflare/shared'; | ||
import { RangeStoredValueMeta } from '@miniflare/shared'; | ||
import { StoredKeyMeta } from '@miniflare/shared'; | ||
@@ -9,2 +10,6 @@ import { StoredMeta } from '@miniflare/shared'; | ||
export declare interface FileMeta<Meta = unknown> extends StoredMeta<Meta> { | ||
key?: string; | ||
} | ||
export declare class FileStorage extends LocalStorage { | ||
@@ -17,5 +22,5 @@ private readonly sanitise; | ||
hasMaybeExpired(key: string): Promise<StoredMeta | undefined>; | ||
headMaybeExpired<Meta>(key: string): Promise<FileMeta<Meta> | undefined>; | ||
getMaybeExpired<Meta>(key: string): Promise<StoredValueMeta<Meta> | undefined>; | ||
getSqliteDatabase(): Database.Database; | ||
getRangeMaybeExpired<Meta = unknown>(key: string, start: number, length: number): Promise<StoredValueMeta<Meta> | undefined>; | ||
getRangeMaybeExpired<Meta = unknown>(key: string, { offset: _offset, length: _length, suffix }: Range): Promise<RangeStoredValueMeta<Meta> | undefined>; | ||
put<Meta = unknown>(key: string, { value, expiration, metadata }: StoredValueMeta<Meta>): Promise<void>; | ||
@@ -22,0 +27,0 @@ deleteMaybeExpired(key: string): Promise<boolean>; |
@@ -31,7 +31,5 @@ var __create = Object.create; | ||
var import_fs = __toModule(require("fs")); | ||
var import_fs2 = __toModule(require("fs")); | ||
var import_path2 = __toModule(require("path")); | ||
var import_shared = __toModule(require("@miniflare/shared")); | ||
var import_storage_memory = __toModule(require("@miniflare/storage-memory")); | ||
var import_better_sqlite3 = __toModule(require("better-sqlite3")); | ||
@@ -53,9 +51,32 @@ // packages/storage-file/src/helpers.ts | ||
} | ||
async function readFileRange(filePath, start, length) { | ||
async function readFileRange(filePath, offset, length, suffix) { | ||
let fd = null; | ||
let res; | ||
try { | ||
const { size } = await import_promises.default.lstat(filePath); | ||
if (suffix !== void 0) { | ||
if (suffix <= 0) { | ||
throw new Error("Suffix must be > 0"); | ||
} | ||
if (suffix > size) | ||
suffix = size; | ||
offset = size - suffix; | ||
length = size - offset; | ||
} | ||
if (offset === void 0) | ||
offset = 0; | ||
if (length === void 0) { | ||
length = size - offset; | ||
} | ||
if (offset < 0) | ||
throw new Error("Offset must be >= 0"); | ||
if (offset >= size) | ||
throw new Error("Offset must be < size"); | ||
if (length <= 0) | ||
throw new Error("Length must be > 0"); | ||
if (offset + length > size) | ||
length = size - offset; | ||
fd = await import_promises.default.open(filePath, "r"); | ||
res = Buffer.alloc(length); | ||
await fd.read(res, 0, length, start); | ||
await fd.read(res, 0, length, offset); | ||
} catch (e) { | ||
@@ -68,3 +89,3 @@ if (e.code === "ENOENT") | ||
} | ||
return res; | ||
return { value: res, offset, length }; | ||
} | ||
@@ -114,3 +135,3 @@ async function writeFile(filePath, data) { | ||
const metaString = await readFile(keyFilePath + metaSuffix, true); | ||
return metaString ? JSON.parse(metaString) : {}; | ||
return metaString ? JSON.parse(metaString) : { expiration: void 0, metadata: void 0 }; | ||
} | ||
@@ -126,2 +147,10 @@ async hasMaybeExpired(key) { | ||
} | ||
async headMaybeExpired(key) { | ||
const [filePath] = this.keyPath(key); | ||
if (!filePath) | ||
return; | ||
if (!(0, import_fs.existsSync)(filePath)) | ||
return; | ||
return await this.meta(filePath); | ||
} | ||
async getMaybeExpired(key) { | ||
@@ -147,9 +176,3 @@ const [filePath] = this.keyPath(key); | ||
} | ||
getSqliteDatabase() { | ||
import_fs2.default.mkdirSync(import_path2.default.dirname(this.root), { recursive: true }); | ||
return new import_better_sqlite3.default(this.root + ".sqlite3", { | ||
nativeBinding: (0, import_shared.getSQLiteNativeBindingLocation)() | ||
}); | ||
} | ||
async getRangeMaybeExpired(key, start, length) { | ||
async getRangeMaybeExpired(key, { offset: _offset, length: _length, suffix }) { | ||
const [filePath] = this.keyPath(key); | ||
@@ -159,5 +182,6 @@ if (!filePath) | ||
try { | ||
const value = await readFileRange(filePath, start, length); | ||
if (value === void 0) | ||
const res = await readFileRange(filePath, _offset, _length, suffix); | ||
if (res === void 0) | ||
return; | ||
const { value, offset, length } = res; | ||
const meta = await this.meta(filePath); | ||
@@ -167,3 +191,4 @@ return { | ||
expiration: meta.expiration, | ||
metadata: meta.metadata | ||
metadata: meta.metadata, | ||
range: { offset, length } | ||
}; | ||
@@ -170,0 +195,0 @@ } catch (e) { |
{ | ||
"name": "@miniflare/storage-file", | ||
"version": "2.6.0-d1.1", | ||
"version": "2.6.0", | ||
"description": "File-system storage module for Miniflare: a fun, full-featured, fully-local simulator for Cloudflare Workers", | ||
@@ -38,8 +38,8 @@ "keywords": [ | ||
"dependencies": { | ||
"@miniflare/shared": "2.6.0-d1.1", | ||
"@miniflare/storage-memory": "2.6.0-d1.1" | ||
"@miniflare/shared": "2.6.0", | ||
"@miniflare/storage-memory": "2.6.0" | ||
}, | ||
"devDependencies": { | ||
"@miniflare/shared-test": "2.6.0-d1.1" | ||
"@miniflare/shared-test": "2.6.0" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
15207
275
0
2
0
+ Added@miniflare/shared@2.6.0(transitive)
+ Added@miniflare/storage-memory@2.6.0(transitive)
- Removed@miniflare/shared@2.6.0-d1.1(transitive)
- Removed@miniflare/storage-memory@2.6.0-d1.1(transitive)
- Removed@types/better-sqlite3@7.6.11(transitive)
- Removed@types/node@22.7.5(transitive)
- Removedbase64-js@1.5.1(transitive)
- Removedbetter-sqlite3@7.6.2(transitive)
- Removedbindings@1.5.0(transitive)
- Removedbl@4.1.0(transitive)
- Removedbuffer@5.7.1(transitive)
- Removedchownr@1.1.4(transitive)
- Removeddecompress-response@6.0.0(transitive)
- Removeddeep-extend@0.6.0(transitive)
- Removeddetect-libc@2.0.3(transitive)
- Removedend-of-stream@1.4.4(transitive)
- Removedexpand-template@2.0.3(transitive)
- Removedfile-uri-to-path@1.0.0(transitive)
- Removedfs-constants@1.0.0(transitive)
- Removedgithub-from-package@0.0.0(transitive)
- Removedieee754@1.2.1(transitive)
- Removedinherits@2.0.4(transitive)
- Removedini@1.3.8(transitive)
- Removedmimic-response@3.1.0(transitive)
- Removedminimist@1.2.8(transitive)
- Removedmkdirp-classic@0.5.3(transitive)
- Removednapi-build-utils@1.0.2(transitive)
- Removednode-abi@3.68.0(transitive)
- Removedonce@1.4.0(transitive)
- Removedprebuild-install@7.1.2(transitive)
- Removedpump@3.0.2(transitive)
- Removedrc@1.2.8(transitive)
- Removedreadable-stream@3.6.2(transitive)
- Removedsafe-buffer@5.2.1(transitive)
- Removedsemver@7.6.3(transitive)
- Removedsimple-concat@1.0.1(transitive)
- Removedsimple-get@4.0.1(transitive)
- Removedstring_decoder@1.3.0(transitive)
- Removedstrip-json-comments@2.0.1(transitive)
- Removedtar-fs@2.1.1(transitive)
- Removedtar-stream@2.2.0(transitive)
- Removedtunnel-agent@0.6.0(transitive)
- Removedundici-types@6.19.8(transitive)
- Removedutil-deprecate@1.0.2(transitive)
- Removedwrappy@1.0.2(transitive)
Updated@miniflare/shared@2.6.0