From 3c5d8570483a09da89fef8ae5761516e7345ba31 Mon Sep 17 00:00:00 2001 From: Anton Golub Date: Thu, 6 Feb 2020 13:55:36 +0300 Subject: [PATCH 1/3] fix(dts): adapt ReplaceInFileConfig interface to actual implementation --- types/index.d.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index 551f27f..5b20236 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -4,15 +4,20 @@ declare module 'replace-in-file' { function replaceInFile(config: ReplaceInFileConfig, cb: (error: Error, results: ReplaceResult[]) => void): void; export default replaceInFile; + export function sync(config: ReplaceInFileConfig): ReplaceResult[]; + namespace replaceInFile { - export function sync(config: ReplaceInFileConfig): ReplaceResult[]; + export { sync }; } + export type From = string | RegExp | FromCallback; + export type To = string | ToCallback; + export interface ReplaceInFileConfig { files: string | string[]; ignore?: string | string[]; - from: string | RegExp | string[] | RegExp[] | FromCallback; - to: string | string[] | ToCallback; + from: From | Array; + to: To | Array; countMatches?: boolean; allowEmptyPaths?: boolean, disableGlobs?: boolean, From 22364d3540a4df7482b6767d342c1aedcb952373 Mon Sep 17 00:00:00 2001 From: Anton Golub Date: Thu, 6 Feb 2020 13:55:36 +0300 Subject: [PATCH 2/3] chore(dts): redeclare sync method outside ns to handle circular definition issue --- types/index.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index 5b20236..c69b299 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -4,12 +4,12 @@ declare module 'replace-in-file' { function replaceInFile(config: ReplaceInFileConfig, cb: (error: Error, results: ReplaceResult[]) => void): void; export default replaceInFile; - export function sync(config: ReplaceInFileConfig): ReplaceResult[]; - namespace replaceInFile { - export { sync }; + export function sync(config: ReplaceInFileConfig): ReplaceResult[]; } + export function sync(config: ReplaceInFileConfig): ReplaceResult[]; + export type From = string | RegExp | FromCallback; export type To = string | ToCallback; From 531b1ecad153d8f0852f5856faf0b6a44a70f916 Mon Sep 17 00:00:00 2001 From: Anton Golub Date: Wed, 19 Feb 2020 17:24:49 +0300 Subject: [PATCH 3/3] feat: use named export for replaceInFile --- lib/replace-in-file.js | 6 +++++- lib/replace-in-file.spec.js | 20 +++++++++++++++++++- types/index.d.ts | 8 ++++++-- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/lib/replace-in-file.js b/lib/replace-in-file.js index afbe503..06e7be1 100644 --- a/lib/replace-in-file.js +++ b/lib/replace-in-file.js @@ -65,7 +65,7 @@ function replaceInFile(config, cb) { /** * Sync API */ -replaceInFile.sync = function(config) { +function replaceInFileSync(config) { //Parse config config = parseConfig(config); @@ -84,5 +84,9 @@ replaceInFile.sync = function(config) { return paths.map(path => replaceSync(path, from, to, config)); }; +replaceInFile.replaceInFile = replaceInFile; // Self-reference to support named import +replaceInFile.replaceInFileSync = replaceInFileSync; +replaceInFile.sync = replaceInFileSync; + //Export module.exports = replaceInFile; diff --git a/lib/replace-in-file.spec.js b/lib/replace-in-file.spec.js index 2b361f8..901faa1 100644 --- a/lib/replace-in-file.spec.js +++ b/lib/replace-in-file.spec.js @@ -3,7 +3,7 @@ /** * Dependencies */ -const replace = require('./replace-in-file'); +import replace, {sync, replaceInFile, replaceInFileSync} from './replace-in-file' const fs = require('fs'); const writeFile = Promise.promisify(fs.writeFile); const deleteFile = Promise.promisify(fs.unlink); @@ -1151,4 +1151,22 @@ describe('Replace in file', () => { expect(results[0].numReplacements).to.equal(0); }); }); + + describe('module export', () => { + it('default module export refers to async replace implementation', () => { + expect(replace).to.be.a('function'); + }); + + it('exports named replaceInFile, replaceInFileSync and sync from module facade', () => { + expect(replaceInFile).to.be.a('function'); + expect(replaceInFileSync).to.be.a('function'); + expect(sync).to.be.a('function'); + }); + + it('exposes inner functions as own fields of replace', () => { + expect(replace.replaceInFile).to.equal(replace); + expect(replace.sync).to.equal(replaceInFileSync); + expect(replace.replaceInFileSync).to.equal(replaceInFileSync); + }); + }) }); diff --git a/types/index.d.ts b/types/index.d.ts index c69b299..e6ef7ef 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,14 +1,18 @@ declare module 'replace-in-file' { - function replaceInFile(config: ReplaceInFileConfig): Promise; - function replaceInFile(config: ReplaceInFileConfig, cb: (error: Error, results: ReplaceResult[]) => void): void; + export function replaceInFile(config: ReplaceInFileConfig): Promise; + export function replaceInFile(config: ReplaceInFileConfig, cb: (error: Error, results: ReplaceResult[]) => void): void; export default replaceInFile; namespace replaceInFile { export function sync(config: ReplaceInFileConfig): ReplaceResult[]; + export function replaceInFileSync(config: ReplaceInFileConfig): ReplaceResult[]; + export function replaceInFile(config: ReplaceInFileConfig): Promise; + export function replaceInFile(config: ReplaceInFileConfig, cb: (error: Error, results: ReplaceResult[]) => void): void; } export function sync(config: ReplaceInFileConfig): ReplaceResult[]; + export function replaceInFileSync(config: ReplaceInFileConfig): ReplaceResult[]; export type From = string | RegExp | FromCallback; export type To = string | ToCallback;