feat(parse-conflict-json): new definition (#47041)

Small module to work with JSON files:
- definition file
- tests

https://github.com/npm/parse-conflict-json
https://github.com/npm/parse-conflict-json#usage

Thanks!
This commit is contained in:
Piotr Błażejewicz (Peter Blazejewicz) 2020-08-27 04:08:12 +02:00 committed by GitHub
parent 343d20ccd1
commit 964a95ea8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 72 additions and 0 deletions

36
types/parse-conflict-json/index.d.ts vendored Normal file
View File

@ -0,0 +1,36 @@
// Type definitions for parse-conflict-json 1.1
// Project: https://github.com/npm/parse-conflict-json#readme
// Definitions by: Piotr Błażejewicz <https://github.com/peterblazejewicz>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
/// <reference types="node" />
/**
* Parse a JSON string that has git merge conflicts, resolving if possible.
* If the JSON is valid, it just does JSON.parse as normal.
* If either side of the conflict is invalid JSON, then an error is thrown for that.
*/
declare function parseConflictJSON(
text: string,
reviver?: (this: any, key: string, value: any) => any,
prefer?: parseConflictJSON.Prefer,
): any;
declare namespace parseConflictJSON {
/**
* returns true if the data looks like a conflicted diff file
*/
function isDiff(text: string): boolean;
/**
* If prefer is set to theirs, then the vaules of theirs and ours are switched in the resolver function.
* (Ie, we'll apply their changes on top of our object, rather than the other way around.)
* Parse the conflicted file into 3 pieces: ours, theirs, and parent
* Get the diff from parent to ours.
* Apply each change of that diff to theirs.
* If any change in the diff set cannot be applied (ie, because they changed an object into a non-object and we changed a field on that object),
* then replace the object at the specified path with the object at the path in ours.
*/
type Prefer = 'theirs' | 'ours';
}
export = parseConflictJSON;

View File

@ -0,0 +1,12 @@
import parseConflictJson = require('parse-conflict-json');
import fs = require('fs');
const data = fs.readFileSync('tsconfig.json', 'utf8');
parseConflictJson.isDiff(data); // $ExpectType boolean
parseConflictJson.isDiff(JSON.stringify({})); // $ExpectType boolean
parseConflictJson(data); // $ExpectType any
parseConflictJson(data, (name, value) => value); // $ExpectType any
parseConflictJson(data, (name, value) => value, 'theirs'); // $ExpectType any
parseConflictJson(data, (name, value) => value, 'ours'); // $ExpectType any

View File

@ -0,0 +1,23 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictFunctionTypes": true,
"strictNullChecks": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"index.d.ts",
"parse-conflict-json-tests.ts"
]
}

View File

@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }