From 396a745b4ee6e50b3f9aa74e59734b486aacda4f Mon Sep 17 00:00:00 2001 From: Felix Hao Date: Thu, 23 Sep 2021 11:29:22 +0800 Subject: [PATCH 1/4] add regedit.d.ts --- package.json | 1 + regedit.d.ts | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 regedit.d.ts diff --git a/package.json b/package.json index 9352b2f9c..278d4f6e2 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "registry" ], "main": "index.js", + "types": "./regedit.d.ts", "scripts": { "lint": "eslint . --fix", "lint:src": "eslint . --fix --ignore-pattern test/", diff --git a/regedit.d.ts b/regedit.d.ts new file mode 100644 index 000000000..45622b4d8 --- /dev/null +++ b/regedit.d.ts @@ -0,0 +1,121 @@ +declare module "regedit" { + export interface REG_SZ_Value { + value: string; + type: "REG_SZ"; + } + + export interface REG_EXPAND_SZ_Value { + value: string; + type: "REG_EXPAND_SZ"; + } + + export interface REG_DWORD_Value { + value: number; + type: "REG_DWORD"; + } + + export interface REG_QWORD_Value { + value: number; + type: "REG_QWORD"; + } + + export interface REG_MULTI_SZ_Value { + value: string[]; + type: "REG_MULTI_SZ"; + } + + export interface REG_BINARY_Value { + value: number[]; + type: "REG_SZ"; + } + + export interface REG_DEFAULT_Value { + value: string; + type: "REG_DEFAULT"; + } + + export type RegistryItemValue = REG_SZ_Value | REG_EXPAND_SZ_Value | REG_DWORD_Value | REG_QWORD_Value | REG_MULTI_SZ_Value | REG_BINARY_Value | REG_DEFAULT_Value; + + export interface RegistryItem { + exists: boolean; + keys: string[]; + values: { + [name: string]: RegistryItemValue; + }; + } + + export type RegistryItemCollection = U; + + export interface RegistryPutItem { + [name: string]: RegistryItemValue; + } + + export type RegistryItemPutCollection = { + [key: string]: RegistryPutItem; + }; + + const OS_ARCH_AGNOSTIC = "A"; + const OS_ARCH_SPECIFIC = "S"; + const OS_ARCH_32BIT = "32"; + const OS_ARCH_64BIT = "64"; + + type Architecture = (typeof OS_ARCH_AGNOSTIC | typeof OS_ARCH_SPECIFIC | typeof OS_ARCH_32BIT | typeof OS_ARCH_64BIT); + type ErrResCallback = (err: Error | undefined, res: RegistryItemCollection) => void; + + export function list(keys: readonly K[], callback: ErrResCallback): void; + export function list(keys: readonly K[], architecture: Architecture, callback?: ErrResCallback): void; + + export function setExternalVBSLocation(newLocation: string): string; + + type ErrCallback = (err: Error | undefined) => void; + + export function createKey(keys: readonly K[], callback: ErrCallback): void; + export function createKey(keys: readonly K[], architecture: Architecture, callback?: ErrCallback): void; + + export function deleteKey(keys: readonly string[], callback: ErrCallback): void; + export function deleteKey(keys: readonly string[], architecture: Architecture, callback?: ErrCallback): void; + + export function putValue(map: RegistryItemPutCollection, callback: ErrCallback): void; + export function putValue(map: RegistryItemPutCollection, architecture: Architecture, callback?: ErrCallback): void; + + export namespace arch { + export function list(keys: readonly K[], callback: ErrResCallback): void; + export function list32(keys: readonly K[], callback: ErrResCallback): void; + export function list64(keys: readonly K[], callback: ErrResCallback): void; + export function createKey(keys: readonly string[], callback: ErrCallback): void; + export function createKey32(keys: readonly string[], callback: ErrCallback): void; + export function createKey64(keys: readonly string[], callback: ErrCallback): void; + export function deleteKey(keys: readonly string[], callback: ErrCallback): void; + export function deleteKey32(keys: readonly string[], callback: ErrCallback): void; + export function deleteKey64(keys: readonly string[], callback: ErrCallback): void; + export function putValue(map: RegistryItemPutCollection, callback: ErrCallback): void; + export function putValue32(map: RegistryItemPutCollection, callback: ErrCallback): void; + export function putValue64(map: RegistryItemPutCollection, callback: ErrCallback): void; + } + + export namespace promisified { + export function list(keys: readonly K[]): Promise>; + export function list(keys: readonly K[], architecture: Architecture): Promise>; + export function createKey(keys: readonly string[]): Promise; + export function createKey(keys: readonly string[], architecture: Architecture): Promise; + export function deleteKey(keys: readonly string[]): Promise; + export function deleteKey(keys: readonly string[], architecture: Architecture): Promise; + export function putValue(map: RegistryItemPutCollection): Promise; + export function putValue(map: RegistryItemPutCollection, architecture: Architecture): Promise; + + export namespace arch { + export function list(keys: readonly K[]): Promise>; + export function list32(keys: readonly K[]): Promise>; + export function list64(keys: readonly K[]): Promise>; + export function createKey(keys: readonly string[]): Promise; + export function createKey32(keys: readonly string[]): Promise; + export function createKey64(keys: readonly string[]): Promise; + export function deleteKey(keys: readonly string[]): Promise; + export function deleteKey32(keys: readonly string[]): Promise; + export function deleteKey64(keys: readonly string[]): Promise; + export function putValue(map: RegistryItemPutCollection): Promise; + export function putValue32(map: RegistryItemPutCollection): Promise; + export function putValue64(map: RegistryItemPutCollection): Promise; + } + } +} From b6c8f2ba74a97c5453c79f924358b9a9baeab2fd Mon Sep 17 00:00:00 2001 From: Felix Hao Date: Thu, 23 Sep 2021 11:41:50 +0800 Subject: [PATCH 2/4] use commonjs pattern --- package.json | 1 + regedit.d.ts | 184 +++++++++++++++++++++++++-------------------------- 2 files changed, 92 insertions(+), 93 deletions(-) diff --git a/package.json b/package.json index 278d4f6e2..138109640 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "registry" ], "main": "index.js", + "type": "commonjs", "types": "./regedit.d.ts", "scripts": { "lint": "eslint . --fix", diff --git a/regedit.d.ts b/regedit.d.ts index 45622b4d8..ed3209857 100644 --- a/regedit.d.ts +++ b/regedit.d.ts @@ -1,121 +1,119 @@ -declare module "regedit" { - export interface REG_SZ_Value { - value: string; - type: "REG_SZ"; - } +export interface REG_SZ_Value { + value: string; + type: "REG_SZ"; +} - export interface REG_EXPAND_SZ_Value { - value: string; - type: "REG_EXPAND_SZ"; - } +export interface REG_EXPAND_SZ_Value { + value: string; + type: "REG_EXPAND_SZ"; +} - export interface REG_DWORD_Value { - value: number; - type: "REG_DWORD"; - } +export interface REG_DWORD_Value { + value: number; + type: "REG_DWORD"; +} - export interface REG_QWORD_Value { - value: number; - type: "REG_QWORD"; - } +export interface REG_QWORD_Value { + value: number; + type: "REG_QWORD"; +} - export interface REG_MULTI_SZ_Value { - value: string[]; - type: "REG_MULTI_SZ"; - } +export interface REG_MULTI_SZ_Value { + value: string[]; + type: "REG_MULTI_SZ"; +} - export interface REG_BINARY_Value { - value: number[]; - type: "REG_SZ"; - } +export interface REG_BINARY_Value { + value: number[]; + type: "REG_SZ"; +} - export interface REG_DEFAULT_Value { - value: string; - type: "REG_DEFAULT"; - } +export interface REG_DEFAULT_Value { + value: string; + type: "REG_DEFAULT"; +} - export type RegistryItemValue = REG_SZ_Value | REG_EXPAND_SZ_Value | REG_DWORD_Value | REG_QWORD_Value | REG_MULTI_SZ_Value | REG_BINARY_Value | REG_DEFAULT_Value; +export type RegistryItemValue = REG_SZ_Value | REG_EXPAND_SZ_Value | REG_DWORD_Value | REG_QWORD_Value | REG_MULTI_SZ_Value | REG_BINARY_Value | REG_DEFAULT_Value; - export interface RegistryItem { - exists: boolean; - keys: string[]; - values: { - [name: string]: RegistryItemValue; - }; - } +export interface RegistryItem { + exists: boolean; + keys: string[]; + values: { + [name: string]: RegistryItemValue; + }; +} - export type RegistryItemCollection = U; +export type RegistryItemCollection = U; - export interface RegistryPutItem { - [name: string]: RegistryItemValue; - } +export interface RegistryPutItem { + [name: string]: RegistryItemValue; +} - export type RegistryItemPutCollection = { - [key: string]: RegistryPutItem; - }; +export type RegistryItemPutCollection = { + [key: string]: RegistryPutItem; +}; - const OS_ARCH_AGNOSTIC = "A"; - const OS_ARCH_SPECIFIC = "S"; - const OS_ARCH_32BIT = "32"; - const OS_ARCH_64BIT = "64"; +export const OS_ARCH_AGNOSTIC = "A"; +export const OS_ARCH_SPECIFIC = "S"; +export const OS_ARCH_32BIT = "32"; +export const OS_ARCH_64BIT = "64"; - type Architecture = (typeof OS_ARCH_AGNOSTIC | typeof OS_ARCH_SPECIFIC | typeof OS_ARCH_32BIT | typeof OS_ARCH_64BIT); - type ErrResCallback = (err: Error | undefined, res: RegistryItemCollection) => void; +type Architecture = (typeof OS_ARCH_AGNOSTIC | typeof OS_ARCH_SPECIFIC | typeof OS_ARCH_32BIT | typeof OS_ARCH_64BIT); +type ErrResCallback = (err: Error | undefined, res: RegistryItemCollection) => void; - export function list(keys: readonly K[], callback: ErrResCallback): void; - export function list(keys: readonly K[], architecture: Architecture, callback?: ErrResCallback): void; +export function list(keys: readonly K[], callback: ErrResCallback): void; +export function list(keys: readonly K[], architecture: Architecture, callback?: ErrResCallback): void; - export function setExternalVBSLocation(newLocation: string): string; +export function setExternalVBSLocation(newLocation: string): string; - type ErrCallback = (err: Error | undefined) => void; +type ErrCallback = (err: Error | undefined) => void; - export function createKey(keys: readonly K[], callback: ErrCallback): void; - export function createKey(keys: readonly K[], architecture: Architecture, callback?: ErrCallback): void; +export function createKey(keys: readonly K[], callback: ErrCallback): void; +export function createKey(keys: readonly K[], architecture: Architecture, callback?: ErrCallback): void; - export function deleteKey(keys: readonly string[], callback: ErrCallback): void; - export function deleteKey(keys: readonly string[], architecture: Architecture, callback?: ErrCallback): void; +export function deleteKey(keys: readonly string[], callback: ErrCallback): void; +export function deleteKey(keys: readonly string[], architecture: Architecture, callback?: ErrCallback): void; +export function putValue(map: RegistryItemPutCollection, callback: ErrCallback): void; +export function putValue(map: RegistryItemPutCollection, architecture: Architecture, callback?: ErrCallback): void; + +export namespace arch { + export function list(keys: readonly K[], callback: ErrResCallback): void; + export function list32(keys: readonly K[], callback: ErrResCallback): void; + export function list64(keys: readonly K[], callback: ErrResCallback): void; + export function createKey(keys: readonly string[], callback: ErrCallback): void; + export function createKey32(keys: readonly string[], callback: ErrCallback): void; + export function createKey64(keys: readonly string[], callback: ErrCallback): void; + export function deleteKey(keys: readonly string[], callback: ErrCallback): void; + export function deleteKey32(keys: readonly string[], callback: ErrCallback): void; + export function deleteKey64(keys: readonly string[], callback: ErrCallback): void; export function putValue(map: RegistryItemPutCollection, callback: ErrCallback): void; - export function putValue(map: RegistryItemPutCollection, architecture: Architecture, callback?: ErrCallback): void; + export function putValue32(map: RegistryItemPutCollection, callback: ErrCallback): void; + export function putValue64(map: RegistryItemPutCollection, callback: ErrCallback): void; +} - export namespace arch { - export function list(keys: readonly K[], callback: ErrResCallback): void; - export function list32(keys: readonly K[], callback: ErrResCallback): void; - export function list64(keys: readonly K[], callback: ErrResCallback): void; - export function createKey(keys: readonly string[], callback: ErrCallback): void; - export function createKey32(keys: readonly string[], callback: ErrCallback): void; - export function createKey64(keys: readonly string[], callback: ErrCallback): void; - export function deleteKey(keys: readonly string[], callback: ErrCallback): void; - export function deleteKey32(keys: readonly string[], callback: ErrCallback): void; - export function deleteKey64(keys: readonly string[], callback: ErrCallback): void; - export function putValue(map: RegistryItemPutCollection, callback: ErrCallback): void; - export function putValue32(map: RegistryItemPutCollection, callback: ErrCallback): void; - export function putValue64(map: RegistryItemPutCollection, callback: ErrCallback): void; - } +export namespace promisified { + export function list(keys: readonly K[]): Promise>; + export function list(keys: readonly K[], architecture: Architecture): Promise>; + export function createKey(keys: readonly string[]): Promise; + export function createKey(keys: readonly string[], architecture: Architecture): Promise; + export function deleteKey(keys: readonly string[]): Promise; + export function deleteKey(keys: readonly string[], architecture: Architecture): Promise; + export function putValue(map: RegistryItemPutCollection): Promise; + export function putValue(map: RegistryItemPutCollection, architecture: Architecture): Promise; - export namespace promisified { + export namespace arch { export function list(keys: readonly K[]): Promise>; - export function list(keys: readonly K[], architecture: Architecture): Promise>; + export function list32(keys: readonly K[]): Promise>; + export function list64(keys: readonly K[]): Promise>; export function createKey(keys: readonly string[]): Promise; - export function createKey(keys: readonly string[], architecture: Architecture): Promise; + export function createKey32(keys: readonly string[]): Promise; + export function createKey64(keys: readonly string[]): Promise; export function deleteKey(keys: readonly string[]): Promise; - export function deleteKey(keys: readonly string[], architecture: Architecture): Promise; + export function deleteKey32(keys: readonly string[]): Promise; + export function deleteKey64(keys: readonly string[]): Promise; export function putValue(map: RegistryItemPutCollection): Promise; - export function putValue(map: RegistryItemPutCollection, architecture: Architecture): Promise; - - export namespace arch { - export function list(keys: readonly K[]): Promise>; - export function list32(keys: readonly K[]): Promise>; - export function list64(keys: readonly K[]): Promise>; - export function createKey(keys: readonly string[]): Promise; - export function createKey32(keys: readonly string[]): Promise; - export function createKey64(keys: readonly string[]): Promise; - export function deleteKey(keys: readonly string[]): Promise; - export function deleteKey32(keys: readonly string[]): Promise; - export function deleteKey64(keys: readonly string[]): Promise; - export function putValue(map: RegistryItemPutCollection): Promise; - export function putValue32(map: RegistryItemPutCollection): Promise; - export function putValue64(map: RegistryItemPutCollection): Promise; - } + export function putValue32(map: RegistryItemPutCollection): Promise; + export function putValue64(map: RegistryItemPutCollection): Promise; } } From aba033c1cc2706f650732c537462d69ebda8e07a Mon Sep 17 00:00:00 2001 From: Felix Hao Date: Tue, 17 May 2022 11:57:30 +0800 Subject: [PATCH 3/4] types for streaming interface & listUnexpandedValues closes #99 --- regedit.d.ts | 63 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 7 deletions(-) diff --git a/regedit.d.ts b/regedit.d.ts index 98c7a2b97..f966d0024 100644 --- a/regedit.d.ts +++ b/regedit.d.ts @@ -59,17 +59,30 @@ export const OS_ARCH_32BIT = "32"; export const OS_ARCH_64BIT = "64"; type Architecture = (typeof OS_ARCH_AGNOSTIC | typeof OS_ARCH_SPECIFIC | typeof OS_ARCH_32BIT | typeof OS_ARCH_64BIT); -type ErrResCallback = (err: Error | undefined, res: RegistryItemCollection) => void; +type ErrResCallback = (err: Error | undefined, res: T) => void; -export function list(keys: readonly K[], callback: ErrResCallback): void; -export function list(keys: readonly K[], architecture: Architecture, callback?: ErrResCallback): void; +export function list(keys: readonly K[], callback: ErrResCallback>): void; +export function list(keys: readonly K[], architecture: Architecture, callback?: ErrResCallback>): void; + +interface Stream { + on(event: "data", callback: (entry: T) => void): Stream; + on(event: "finish", callback: () => void): Stream; +} + +interface RegistryEntry { + key: T; + data: RegistryItem; +} + +export function list(keys: readonly K[]): Stream>; +export function list(keys: readonly K[], architecture: Architecture): Stream>; export function setExternalVBSLocation(newLocation: string): string; interface ErrorWithCode extends Error { code: number; description: string; - } +} type ErrCallback = (err: ErrorWithCode | undefined) => void; @@ -82,10 +95,27 @@ export function deleteKey(keys: readonly string[], architecture: Architecture, c export function putValue(map: RegistryItemPutCollection, callback: ErrCallback): void; export function putValue(map: RegistryItemPutCollection, architecture: Architecture, callback?: ErrCallback): void; +interface UnexpandedValue { + path: T; + exists: boolean; + value: string; +} + +export function listUnexpandedValues(key: K, callback: ErrResCallback[]>): void; +export function listUnexpandedValues(key: K): Stream>; +export function listUnexpandedValues(keys: K[], callback: ErrResCallback[]>): void; +export function listUnexpandedValues(keys: K[]): Stream>; +export function listUnexpandedValues(key: K, architecture: Architecture, callback: ErrResCallback[]>): void; +export function listUnexpandedValues(key: K, architecture: Architecture): Stream>; +export function listUnexpandedValues(keys: K[], architecture: Architecture, callback: ErrResCallback[]>): void; +export function listUnexpandedValues(keys: K[], architecture: Architecture): Stream>; + export namespace arch { - export function list(keys: readonly K[], callback: ErrResCallback): void; - export function list32(keys: readonly K[], callback: ErrResCallback): void; - export function list64(keys: readonly K[], callback: ErrResCallback): void; + export function list(keys: readonly K[], callback: ErrResCallback>): void; + export function list32(keys: readonly K[], callback: ErrResCallback>): void; + export function list64(keys: readonly K[], callback: ErrResCallback>): void; + export function list32(keys: readonly K[]): Stream>; + export function list64(keys: readonly K[]): Stream>; export function createKey(keys: readonly string[], callback: ErrCallback): void; export function createKey32(keys: readonly string[], callback: ErrCallback): void; export function createKey64(keys: readonly string[], callback: ErrCallback): void; @@ -95,6 +125,15 @@ export namespace arch { export function putValue(map: RegistryItemPutCollection, callback: ErrCallback): void; export function putValue32(map: RegistryItemPutCollection, callback: ErrCallback): void; export function putValue64(map: RegistryItemPutCollection, callback: ErrCallback): void; + + export function listUnexpandedValues32(key: K, callback: ErrResCallback[]>): void; + export function listUnexpandedValues64(key: K, callback: ErrResCallback[]>): void; + export function listUnexpandedValues32(key: K): Stream>; + export function listUnexpandedValues64(key: K): Stream>; + export function listUnexpandedValues32(keys: K[], callback: ErrResCallback[]>): void; + export function listUnexpandedValues64(keys: K[], callback: ErrResCallback[]>): void; + export function listUnexpandedValues32(keys: K[]): Stream>; + export function listUnexpandedValues64(keys: K[]): Stream>; } export namespace promisified { @@ -107,6 +146,11 @@ export namespace promisified { export function putValue(map: RegistryItemPutCollection): Promise; export function putValue(map: RegistryItemPutCollection, architecture: Architecture): Promise; + export function listUnexpandedValues(key: K): Promise[]>; + export function listUnexpandedValues(keys: K[]): Promise[]>; + export function listUnexpandedValues(key: K, architecture: Architecture): Promise[]>; + export function listUnexpandedValues(keys: K[], architecture: Architecture): Promise[]>; + export namespace arch { export function list(keys: readonly K[]): Promise>; export function list32(keys: readonly K[]): Promise>; @@ -120,5 +164,10 @@ export namespace promisified { export function putValue(map: RegistryItemPutCollection): Promise; export function putValue32(map: RegistryItemPutCollection): Promise; export function putValue64(map: RegistryItemPutCollection): Promise; + + export function listUnexpandedValues32(key: K): Promise[]>; + export function listUnexpandedValues64(key: K): Promise[]>; + export function listUnexpandedValues32(keys: K[]): Promise[]>; + export function listUnexpandedValues64(keys: K[]): Promise[]>; } } From 9ada30b11bb9b1f8cc3224df963ff127f2598eb9 Mon Sep 17 00:00:00 2001 From: Felix Hao Date: Tue, 17 May 2022 12:01:04 +0800 Subject: [PATCH 4/4] fix push error --- test/regedit.test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/regedit.test.js b/test/regedit.test.js index 47c328f07..228ecf5af 100644 --- a/test/regedit.test.js +++ b/test/regedit.test.js @@ -832,7 +832,8 @@ describe('regedit', function() { describe('listUnexpandedValues', function () { it('reads values without expanding environment variables embedded in them', function(done) { - index.listUnexpandedValues('HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\\AppData', function(err, result) { + const key = 'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\\AppData' + index.listUnexpandedValues(key, function(err, result) { if (err) { return done(err) }