From 931bee7af200e188853a72d0c062b138f1312b3f Mon Sep 17 00:00:00 2001 From: Anton Golub Date: Sat, 25 Apr 2020 07:41:17 +0300 Subject: [PATCH] fix(dts): adapt ReplaceInFileConfig interface to actual implementation (#107) * fix(dts): adapt ReplaceInFileConfig interface to actual implementation * chore(dts): redeclare sync method outside ns to handle circular definition issue * feat: use named export for replaceInFile --- lib/replace-in-file.js | 6 +++++- lib/replace-in-file.spec.js | 20 +++++++++++++++++++- types/index.d.ts | 17 +++++++++++++---- 3 files changed, 37 insertions(+), 6 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 551f27f..e6ef7ef 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,18 +1,27 @@ 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; + 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,