@vltpkg/keychain 0.0.0-6 → 0.0.0-8

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/esm/index.js CHANGED
@@ -2,8 +2,8 @@
2
2
  // only the keychain file. Any other source of auth data should be
3
3
  // handled before or instead of this utility.
4
4
  import { XDG } from '@vltpkg/xdg';
5
- import { mkdir, readFile, rename, writeFile } from 'fs/promises';
6
- import { dirname } from 'path';
5
+ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
6
+ import { dirname } from 'node:path';
7
7
  const writeFileAtomic = async (path, data) => {
8
8
  const p = path + String(Math.random());
9
9
  await writeFile(p, data, { mode: 0o600 });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Note: this class does NOT handle reading from the environment,\n// only the keychain file. Any other source of auth data should be\n// handled before or instead of this utility.\nimport { XDG } from '@vltpkg/xdg'\nimport { mkdir, readFile, rename, writeFile } from 'fs/promises'\nimport { dirname } from 'path'\n\nconst writeFileAtomic = async (path: string, data: string) => {\n const p = path + String(Math.random())\n await writeFile(p, data, { mode: 0o600 })\n await rename(p, path)\n}\n\nconst { hasOwnProperty } = Object.prototype\nconst hasOwn = (obj: unknown, key: string) =>\n !!obj && typeof obj === 'object' && hasOwnProperty.call(obj, key)\n\nexport class Keychain<V extends string = string> {\n #data?: Record<string, V>\n #didExitSave = false\n #dirty = false\n #file: string\n #xdg: XDG\n\n constructor(application: string) {\n this.#xdg = new XDG(application)\n this.#file = this.#xdg.data('keychain.json')\n }\n\n get file() {\n return this.#file\n }\n get dirty() {\n return this.#dirty\n }\n\n async get(key: string): Promise<V | undefined> {\n return (await this.#load()).getSync(key)\n }\n\n getSync(key: string): V | undefined {\n return this.#data?.[key]\n }\n\n async load() {\n await this.#load()\n }\n\n async #load(): Promise<this> {\n if (this.#data) return this\n let ok = false\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.#data = JSON.parse(await readFile(this.#file, 'utf8'))\n ok = !!this.#data\n } finally {\n if (!ok) {\n // just write the file if it failed in any way.\n await this.#mkdir()\n await writeFileAtomic(this.#file, '{}\\n')\n this.#data = {}\n }\n // eslint-disable-next-line no-unsafe-finally\n return this\n }\n }\n\n async has(key: string): Promise<boolean> {\n return (await this.#load()).hasSync(key)\n }\n\n hasSync(key: string): boolean {\n return !!hasOwn(this.#data, key)\n }\n\n async #mkdir() {\n await mkdir(dirname(this.#file), {\n recursive: true,\n mode: 0o700,\n })\n }\n\n set(key: string, value: V) {\n ;(this.#data ??= {})[key] = value\n this.#makeDirty()\n }\n\n delete(key: string) {\n if (!this.#data) return\n delete this.#data[key]\n this.#makeDirty()\n }\n\n #makeDirty() {\n this.#dirty = true\n if (!this.#didExitSave) {\n this.#didExitSave = true\n process.once('beforeExit', () => {\n void this.save()\n })\n }\n }\n\n async save() {\n if (!this.#dirty || !this.#data) return\n this.#dirty = false\n await this.#mkdir()\n await writeFileAtomic(\n this.#file,\n JSON.stringify(this.#data) + '\\n',\n )\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Note: this class does NOT handle reading from the environment,\n// only the keychain file. Any other source of auth data should be\n// handled before or instead of this utility.\nimport { XDG } from '@vltpkg/xdg'\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises'\nimport { dirname } from 'node:path'\n\nconst writeFileAtomic = async (path: string, data: string) => {\n const p = path + String(Math.random())\n await writeFile(p, data, { mode: 0o600 })\n await rename(p, path)\n}\n\nconst { hasOwnProperty } = Object.prototype\nconst hasOwn = (obj: unknown, key: string) =>\n !!obj && typeof obj === 'object' && hasOwnProperty.call(obj, key)\n\nexport class Keychain<V extends string = string> {\n #data?: Record<string, V>\n #didExitSave = false\n #dirty = false\n #file: string\n #xdg: XDG\n\n constructor(application: string) {\n this.#xdg = new XDG(application)\n this.#file = this.#xdg.data('keychain.json')\n }\n\n get file() {\n return this.#file\n }\n get dirty() {\n return this.#dirty\n }\n\n async get(key: string): Promise<V | undefined> {\n return (await this.#load()).getSync(key)\n }\n\n getSync(key: string): V | undefined {\n return this.#data?.[key]\n }\n\n async load() {\n await this.#load()\n }\n\n async #load(): Promise<this> {\n if (this.#data) return this\n let ok = false\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.#data = JSON.parse(await readFile(this.#file, 'utf8'))\n ok = !!this.#data\n } finally {\n if (!ok) {\n // just write the file if it failed in any way.\n await this.#mkdir()\n await writeFileAtomic(this.#file, '{}\\n')\n this.#data = {}\n }\n // eslint-disable-next-line no-unsafe-finally\n return this\n }\n }\n\n async has(key: string): Promise<boolean> {\n return (await this.#load()).hasSync(key)\n }\n\n hasSync(key: string): boolean {\n return !!hasOwn(this.#data, key)\n }\n\n async #mkdir() {\n await mkdir(dirname(this.#file), {\n recursive: true,\n mode: 0o700,\n })\n }\n\n set(key: string, value: V) {\n ;(this.#data ??= {})[key] = value\n this.#makeDirty()\n }\n\n delete(key: string) {\n if (!this.#data) return\n delete this.#data[key]\n this.#makeDirty()\n }\n\n #makeDirty() {\n this.#dirty = true\n if (!this.#didExitSave) {\n this.#didExitSave = true\n process.once('beforeExit', () => {\n void this.save()\n })\n }\n }\n\n async save() {\n if (!this.#dirty || !this.#data) return\n this.#dirty = false\n await this.#mkdir()\n await writeFileAtomic(\n this.#file,\n JSON.stringify(this.#data) + '\\n',\n )\n }\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vltpkg/keychain",
3
3
  "description": "The filesystem keychain for `@vltpkg/registry-client`",
4
- "version": "0.0.0-6",
4
+ "version": "0.0.0-8",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/vltpkg/vltpkg.git",
@@ -19,11 +19,7 @@
19
19
  }
20
20
  },
21
21
  "dependencies": {
22
- "lru-cache": "^11.0.2",
23
- "rimraf": "^6.0.1",
24
- "@vltpkg/error-cause": "0.0.0-6",
25
- "@vltpkg/types": "0.0.0-6",
26
- "@vltpkg/xdg": "0.0.0-6"
22
+ "@vltpkg/xdg": "0.0.0-8"
27
23
  },
28
24
  "devDependencies": {
29
25
  "@eslint/js": "^9.20.0",