git-fs-s3 0.15.0 → 0.15.2

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/dist/node.js CHANGED
@@ -9,6 +9,7 @@ var FileObjectStore = class {
9
9
  constructor(root) {
10
10
  this.root = root;
11
11
  }
12
+ root;
12
13
  memory = new MemoryObjectStore();
13
14
  loaded = null;
14
15
  fileFor(key) {
package/dist/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/stores/file.ts"],"sourcesContent":["/**\n * A disk-backed {@link ObjectStore} for local development and tests that\n * should survive restarts: the same semantics as `MemoryObjectStore`, which\n * serves every read, with each write mirrored to a file under `root` and the\n * whole tree loaded back on first use. Node-only (`git-fs-s3/node`); keep it\n * out of edge builds. Not for production: it holds everything in memory and\n * is single-process.\n *\n * Keys map to paths under `root`. A key that would escape it (`../x`) is\n * rejected, failing closed.\n */\nimport { mkdir, readdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type {\n\tListOptions,\n\tListResult,\n\tObjectStat,\n\tObjectStore,\n} from \"../types.js\";\nimport { MemoryObjectStore } from \"./memory.js\";\n\nexport class FileObjectStore implements ObjectStore {\n\tprivate readonly memory = new MemoryObjectStore();\n\tprivate loaded: Promise<void> | null = null;\n\n\tconstructor(private readonly root: string) {}\n\n\tprivate fileFor(key: string): string {\n\t\tconst file = path.resolve(this.root, key);\n\t\tif (!file.startsWith(path.resolve(this.root) + path.sep)) {\n\t\t\tthrow new Error(`Storage key escapes the store root: ${key}`);\n\t\t}\n\t\treturn file;\n\t}\n\n\tprivate ready(): Promise<void> {\n\t\tthis.loaded ??= this.load(this.root);\n\t\treturn this.loaded;\n\t}\n\n\tprivate async load(dir: string): Promise<void> {\n\t\tconst entries = await readdir(dir, { withFileTypes: true }).catch(\n\t\t\t(error: NodeJS.ErrnoException) => {\n\t\t\t\tif (error.code === \"ENOENT\") return [];\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t);\n\t\tfor (const entry of entries) {\n\t\t\tconst full = path.join(dir, entry.name);\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tawait this.load(full);\n\t\t\t} else if (entry.isFile()) {\n\t\t\t\tconst key = path.relative(this.root, full).split(path.sep).join(\"/\");\n\t\t\t\tawait this.memory.put(key, new Uint8Array(await readFile(full)));\n\t\t\t}\n\t\t}\n\t}\n\n\tasync get(key: string): Promise<Uint8Array | null> {\n\t\tawait this.ready();\n\t\treturn this.memory.get(key);\n\t}\n\n\tasync getRange(\n\t\tkey: string,\n\t\tstart: number,\n\t\tend: number,\n\t): Promise<Uint8Array | null> {\n\t\tawait this.ready();\n\t\treturn this.memory.getRange(key, start, end);\n\t}\n\n\tasync head(key: string): Promise<ObjectStat | null> {\n\t\tawait this.ready();\n\t\treturn this.memory.head(key);\n\t}\n\n\tasync list(prefix: string, options?: ListOptions): Promise<ListResult> {\n\t\tawait this.ready();\n\t\treturn this.memory.list(prefix, options);\n\t}\n\n\tasync put(key: string, data: Uint8Array): Promise<void> {\n\t\tawait this.ready();\n\t\tconst file = this.fileFor(key);\n\t\tawait mkdir(path.dirname(file), { recursive: true });\n\t\tawait writeFile(file, data);\n\t\tawait this.memory.put(key, data);\n\t}\n\n\tasync delete(key: string): Promise<void> {\n\t\tawait this.ready();\n\t\tawait rm(this.fileFor(key), { force: true });\n\t\tawait this.memory.delete(key);\n\t}\n}\n"],"mappings":";;;;;AAWA,SAAS,OAAO,SAAS,UAAU,IAAI,iBAAiB;AACxD,OAAO,UAAU;AASV,IAAM,kBAAN,MAA6C;AAAA,EAInD,YAA6B,MAAc;AAAd;AAAA,EAAe;AAAA,EAH3B,SAAS,IAAI,kBAAkB;AAAA,EACxC,SAA+B;AAAA,EAI/B,QAAQ,KAAqB;AACpC,UAAM,OAAO,KAAK,QAAQ,KAAK,MAAM,GAAG;AACxC,QAAI,CAAC,KAAK,WAAW,KAAK,QAAQ,KAAK,IAAI,IAAI,KAAK,GAAG,GAAG;AACzD,YAAM,IAAI,MAAM,uCAAuC,GAAG,EAAE;AAAA,IAC7D;AACA,WAAO;AAAA,EACR;AAAA,EAEQ,QAAuB;AAC9B,SAAK,WAAW,KAAK,KAAK,KAAK,IAAI;AACnC,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,MAAc,KAAK,KAA4B;AAC9C,UAAM,UAAU,MAAM,QAAQ,KAAK,EAAE,eAAe,KAAK,CAAC,EAAE;AAAA,MAC3D,CAAC,UAAiC;AACjC,YAAI,MAAM,SAAS,SAAU,QAAO,CAAC;AACrC,cAAM;AAAA,MACP;AAAA,IACD;AACA,eAAW,SAAS,SAAS;AAC5B,YAAM,OAAO,KAAK,KAAK,KAAK,MAAM,IAAI;AACtC,UAAI,MAAM,YAAY,GAAG;AACxB,cAAM,KAAK,KAAK,IAAI;AAAA,MACrB,WAAW,MAAM,OAAO,GAAG;AAC1B,cAAM,MAAM,KAAK,SAAS,KAAK,MAAM,IAAI,EAAE,MAAM,KAAK,GAAG,EAAE,KAAK,GAAG;AACnE,cAAM,KAAK,OAAO,IAAI,KAAK,IAAI,WAAW,MAAM,SAAS,IAAI,CAAC,CAAC;AAAA,MAChE;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,KAAyC;AAClD,UAAM,KAAK,MAAM;AACjB,WAAO,KAAK,OAAO,IAAI,GAAG;AAAA,EAC3B;AAAA,EAEA,MAAM,SACL,KACA,OACA,KAC6B;AAC7B,UAAM,KAAK,MAAM;AACjB,WAAO,KAAK,OAAO,SAAS,KAAK,OAAO,GAAG;AAAA,EAC5C;AAAA,EAEA,MAAM,KAAK,KAAyC;AACnD,UAAM,KAAK,MAAM;AACjB,WAAO,KAAK,OAAO,KAAK,GAAG;AAAA,EAC5B;AAAA,EAEA,MAAM,KAAK,QAAgB,SAA4C;AACtE,UAAM,KAAK,MAAM;AACjB,WAAO,KAAK,OAAO,KAAK,QAAQ,OAAO;AAAA,EACxC;AAAA,EAEA,MAAM,IAAI,KAAa,MAAiC;AACvD,UAAM,KAAK,MAAM;AACjB,UAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,UAAM,MAAM,KAAK,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AACnD,UAAM,UAAU,MAAM,IAAI;AAC1B,UAAM,KAAK,OAAO,IAAI,KAAK,IAAI;AAAA,EAChC;AAAA,EAEA,MAAM,OAAO,KAA4B;AACxC,UAAM,KAAK,MAAM;AACjB,UAAM,GAAG,KAAK,QAAQ,GAAG,GAAG,EAAE,OAAO,KAAK,CAAC;AAC3C,UAAM,KAAK,OAAO,OAAO,GAAG;AAAA,EAC7B;AACD;","names":[]}
1
+ {"version":3,"sources":["../src/stores/file.ts"],"sourcesContent":["/**\n * A disk-backed {@link ObjectStore} for local development and tests that\n * should survive restarts: the same semantics as `MemoryObjectStore`, which\n * serves every read, with each write mirrored to a file under `root` and the\n * whole tree loaded back on first use. Node-only (`git-fs-s3/node`); keep it\n * out of edge builds. Not for production: it holds everything in memory and\n * is single-process.\n *\n * Keys map to paths under `root`. A key that would escape it (`../x`) is\n * rejected, failing closed.\n */\nimport { mkdir, readdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type {\n\tListOptions,\n\tListResult,\n\tObjectStat,\n\tObjectStore,\n} from \"../types.js\";\nimport { MemoryObjectStore } from \"./memory.js\";\n\nexport class FileObjectStore implements ObjectStore {\n\tprivate readonly memory = new MemoryObjectStore();\n\tprivate loaded: Promise<void> | null = null;\n\n\tconstructor(private readonly root: string) {}\n\n\tprivate fileFor(key: string): string {\n\t\tconst file = path.resolve(this.root, key);\n\t\tif (!file.startsWith(path.resolve(this.root) + path.sep)) {\n\t\t\tthrow new Error(`Storage key escapes the store root: ${key}`);\n\t\t}\n\t\treturn file;\n\t}\n\n\tprivate ready(): Promise<void> {\n\t\tthis.loaded ??= this.load(this.root);\n\t\treturn this.loaded;\n\t}\n\n\tprivate async load(dir: string): Promise<void> {\n\t\tconst entries = await readdir(dir, { withFileTypes: true }).catch(\n\t\t\t(error: NodeJS.ErrnoException) => {\n\t\t\t\tif (error.code === \"ENOENT\") return [];\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t);\n\t\tfor (const entry of entries) {\n\t\t\tconst full = path.join(dir, entry.name);\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tawait this.load(full);\n\t\t\t} else if (entry.isFile()) {\n\t\t\t\tconst key = path.relative(this.root, full).split(path.sep).join(\"/\");\n\t\t\t\tawait this.memory.put(key, new Uint8Array(await readFile(full)));\n\t\t\t}\n\t\t}\n\t}\n\n\tasync get(key: string): Promise<Uint8Array | null> {\n\t\tawait this.ready();\n\t\treturn this.memory.get(key);\n\t}\n\n\tasync getRange(\n\t\tkey: string,\n\t\tstart: number,\n\t\tend: number,\n\t): Promise<Uint8Array | null> {\n\t\tawait this.ready();\n\t\treturn this.memory.getRange(key, start, end);\n\t}\n\n\tasync head(key: string): Promise<ObjectStat | null> {\n\t\tawait this.ready();\n\t\treturn this.memory.head(key);\n\t}\n\n\tasync list(prefix: string, options?: ListOptions): Promise<ListResult> {\n\t\tawait this.ready();\n\t\treturn this.memory.list(prefix, options);\n\t}\n\n\tasync put(key: string, data: Uint8Array): Promise<void> {\n\t\tawait this.ready();\n\t\tconst file = this.fileFor(key);\n\t\tawait mkdir(path.dirname(file), { recursive: true });\n\t\tawait writeFile(file, data);\n\t\tawait this.memory.put(key, data);\n\t}\n\n\tasync delete(key: string): Promise<void> {\n\t\tawait this.ready();\n\t\tawait rm(this.fileFor(key), { force: true });\n\t\tawait this.memory.delete(key);\n\t}\n}\n"],"mappings":";;;;;AAWA,SAAS,OAAO,SAAS,UAAU,IAAI,iBAAiB;AACxD,OAAO,UAAU;AASV,IAAM,kBAAN,MAA6C;AAAA,EAInD,YAA6B,MAAc;AAAd;AAAA,EAAe;AAAA,EAAf;AAAA,EAHZ,SAAS,IAAI,kBAAkB;AAAA,EACxC,SAA+B;AAAA,EAI/B,QAAQ,KAAqB;AACpC,UAAM,OAAO,KAAK,QAAQ,KAAK,MAAM,GAAG;AACxC,QAAI,CAAC,KAAK,WAAW,KAAK,QAAQ,KAAK,IAAI,IAAI,KAAK,GAAG,GAAG;AACzD,YAAM,IAAI,MAAM,uCAAuC,GAAG,EAAE;AAAA,IAC7D;AACA,WAAO;AAAA,EACR;AAAA,EAEQ,QAAuB;AAC9B,SAAK,WAAW,KAAK,KAAK,KAAK,IAAI;AACnC,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,MAAc,KAAK,KAA4B;AAC9C,UAAM,UAAU,MAAM,QAAQ,KAAK,EAAE,eAAe,KAAK,CAAC,EAAE;AAAA,MAC3D,CAAC,UAAiC;AACjC,YAAI,MAAM,SAAS,SAAU,QAAO,CAAC;AACrC,cAAM;AAAA,MACP;AAAA,IACD;AACA,eAAW,SAAS,SAAS;AAC5B,YAAM,OAAO,KAAK,KAAK,KAAK,MAAM,IAAI;AACtC,UAAI,MAAM,YAAY,GAAG;AACxB,cAAM,KAAK,KAAK,IAAI;AAAA,MACrB,WAAW,MAAM,OAAO,GAAG;AAC1B,cAAM,MAAM,KAAK,SAAS,KAAK,MAAM,IAAI,EAAE,MAAM,KAAK,GAAG,EAAE,KAAK,GAAG;AACnE,cAAM,KAAK,OAAO,IAAI,KAAK,IAAI,WAAW,MAAM,SAAS,IAAI,CAAC,CAAC;AAAA,MAChE;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,KAAyC;AAClD,UAAM,KAAK,MAAM;AACjB,WAAO,KAAK,OAAO,IAAI,GAAG;AAAA,EAC3B;AAAA,EAEA,MAAM,SACL,KACA,OACA,KAC6B;AAC7B,UAAM,KAAK,MAAM;AACjB,WAAO,KAAK,OAAO,SAAS,KAAK,OAAO,GAAG;AAAA,EAC5C;AAAA,EAEA,MAAM,KAAK,KAAyC;AACnD,UAAM,KAAK,MAAM;AACjB,WAAO,KAAK,OAAO,KAAK,GAAG;AAAA,EAC5B;AAAA,EAEA,MAAM,KAAK,QAAgB,SAA4C;AACtE,UAAM,KAAK,MAAM;AACjB,WAAO,KAAK,OAAO,KAAK,QAAQ,OAAO;AAAA,EACxC;AAAA,EAEA,MAAM,IAAI,KAAa,MAAiC;AACvD,UAAM,KAAK,MAAM;AACjB,UAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,UAAM,MAAM,KAAK,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AACnD,UAAM,UAAU,MAAM,IAAI;AAC1B,UAAM,KAAK,OAAO,IAAI,KAAK,IAAI;AAAA,EAChC;AAAA,EAEA,MAAM,OAAO,KAA4B;AACxC,UAAM,KAAK,MAAM;AACjB,UAAM,GAAG,KAAK,QAAQ,GAAG,GAAG,EAAE,OAAO,KAAK,CAAC;AAC3C,UAAM,KAAK,OAAO,OAAO,GAAG;AAAA,EAC7B;AACD;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "git-fs-s3",
3
- "version": "0.15.0",
4
- "description": "isomorphic-git filesystem backend for S3-compatible object storage (AWS S3, Cloudflare R2, MinIO) \u2014 run git servers without a disk",
3
+ "version": "0.15.2",
4
+ "description": "isomorphic-git filesystem backend for S3-compatible object storage (AWS S3, Cloudflare R2, MinIO) — run git servers without a disk",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": {
@@ -33,17 +33,6 @@
33
33
  "dist"
34
34
  ],
35
35
  "sideEffects": false,
36
- "scripts": {
37
- "build": "tsup && tsc -p tsconfig.build.json",
38
- "test": "vitest run",
39
- "test:watch": "vitest",
40
- "coverage": "vitest run --coverage",
41
- "typecheck": "tsc --noEmit",
42
- "lint": "biome check src/ test/",
43
- "lint:fix": "biome check --write src/ test/",
44
- "format": "biome format --write src/ test/",
45
- "prepublishOnly": "npm run typecheck && npm test && npm run build"
46
- },
47
36
  "keywords": [
48
37
  "git",
49
38
  "isomorphic-git",
@@ -60,10 +49,11 @@
60
49
  "license": "AGPL-3.0-or-later",
61
50
  "repository": {
62
51
  "type": "git",
63
- "url": "git+https://github.com/nandan-varma/git-fs-s3.git"
52
+ "url": "git+https://github.com/nandan-varma/pushstack.git",
53
+ "directory": "packages/git-fs-s3"
64
54
  },
65
55
  "bugs": {
66
- "url": "https://github.com/nandan-varma/git-fs-s3/issues"
56
+ "url": "https://github.com/nandan-varma/pushstack/issues"
67
57
  },
68
58
  "homepage": "https://github.com/nandan-varma/git-fs-s3#readme",
69
59
  "publishConfig": {
@@ -108,5 +98,15 @@
108
98
  },
109
99
  "allowScripts": {
110
100
  "esbuild@0.27.7": true
101
+ },
102
+ "scripts": {
103
+ "build": "tsup && tsc -p tsconfig.build.json",
104
+ "test": "vitest run",
105
+ "test:watch": "vitest",
106
+ "coverage": "vitest run --coverage",
107
+ "typecheck": "tsc --noEmit",
108
+ "lint": "biome check src/ test/",
109
+ "lint:fix": "biome check --write src/ test/",
110
+ "format": "biome format --write src/ test/"
111
111
  }
112
- }
112
+ }