@vltpkg/keychain 0.0.0-7 → 0.0.0-9

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAiBA,qBAAa,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;;gBAOjC,WAAW,EAAE,MAAM;IAK/B,IAAI,IAAI,WAEP;IACD,IAAI,KAAK,YAER;IAEK,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI9C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI7B,IAAI;IAuBJ,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAW7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAKzB,MAAM,CAAC,GAAG,EAAE,MAAM;IAgBZ,IAAI;CASX"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAOA,qBAAa,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;;gBAOjC,WAAW,EAAE,MAAM;IAK/B,IAAI,IAAI,WAEP;IACD,IAAI,KAAK,YAER;IAEK,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI9C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI7B,IAAI;IAuBJ,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAoB7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAKzB,MAAM,CAAC,GAAG,EAAE,MAAM;IAgBZ,IAAI;CAKX"}
package/dist/esm/index.js CHANGED
@@ -4,13 +4,6 @@
4
4
  import { XDG } from '@vltpkg/xdg';
5
5
  import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
6
6
  import { dirname } from 'node:path';
7
- const writeFileAtomic = async (path, data) => {
8
- const p = path + String(Math.random());
9
- await writeFile(p, data, { mode: 0o600 });
10
- await rename(p, path);
11
- };
12
- const { hasOwnProperty } = Object.prototype;
13
- const hasOwn = (obj, key) => !!obj && typeof obj === 'object' && hasOwnProperty.call(obj, key);
14
7
  export class Keychain {
15
8
  #data;
16
9
  #didExitSave = false;
@@ -41,16 +34,14 @@ export class Keychain {
41
34
  return this;
42
35
  let ok = false;
43
36
  try {
44
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
45
37
  this.#data = JSON.parse(await readFile(this.#file, 'utf8'));
46
38
  ok = !!this.#data;
47
39
  }
48
40
  finally {
49
41
  if (!ok) {
50
42
  // just write the file if it failed in any way.
51
- await this.#mkdir();
52
- await writeFileAtomic(this.#file, '{}\n');
53
43
  this.#data = {};
44
+ await this.#writeFile().catch(() => { });
54
45
  }
55
46
  // eslint-disable-next-line no-unsafe-finally
56
47
  return this;
@@ -60,7 +51,7 @@ export class Keychain {
60
51
  return (await this.#load()).hasSync(key);
61
52
  }
62
53
  hasSync(key) {
63
- return !!hasOwn(this.#data, key);
54
+ return !!this.#data && Object.hasOwn(this.#data, key);
64
55
  }
65
56
  async #mkdir() {
66
57
  await mkdir(dirname(this.#file), {
@@ -68,6 +59,14 @@ export class Keychain {
68
59
  mode: 0o700,
69
60
  });
70
61
  }
62
+ async #writeFile() {
63
+ await this.#mkdir();
64
+ const tmp = this.#file + String(Math.random());
65
+ await writeFile(tmp, JSON.stringify(this.#data) + '\n', {
66
+ mode: 0o600,
67
+ });
68
+ await rename(tmp, this.#file);
69
+ }
71
70
  set(key, value) {
72
71
  ;
73
72
  (this.#data ??= {})[key] = value;
@@ -92,8 +91,7 @@ export class Keychain {
92
91
  if (!this.#dirty || !this.#data)
93
92
  return;
94
93
  this.#dirty = false;
95
- await this.#mkdir();
96
- await writeFileAtomic(this.#file, JSON.stringify(this.#data) + '\n');
94
+ await this.#writeFile();
97
95
  }
98
96
  }
99
97
  //# sourceMappingURL=index.js.map
@@ -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 '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"]}
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\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 this.#data = JSON.parse(\n await readFile(this.#file, 'utf8'),\n ) as Record<string, V>\n ok = !!this.#data\n } finally {\n if (!ok) {\n // just write the file if it failed in any way.\n this.#data = {}\n await this.#writeFile().catch(() => {})\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 !!this.#data && Object.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 async #writeFile() {\n await this.#mkdir()\n const tmp = this.#file + String(Math.random())\n await writeFile(tmp, JSON.stringify(this.#data) + '\\n', {\n mode: 0o600,\n })\n await rename(tmp, this.#file)\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.#writeFile()\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-7",
4
+ "version": "0.0.0-9",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/vltpkg/vltpkg.git",
@@ -19,7 +19,7 @@
19
19
  }
20
20
  },
21
21
  "dependencies": {
22
- "@vltpkg/xdg": "0.0.0-7"
22
+ "@vltpkg/xdg": "0.0.0-9"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@eslint/js": "^9.20.0",