Merge pull request #17905 from QuatroCode/new-types/json2md

[json2md] Initial types
This commit is contained in:
Ryan Cavanaugh
2017-07-13 11:19:10 -07:00
committed by GitHub
4 changed files with 298 additions and 0 deletions

65
types/json2md/index.d.ts vendored Normal file
View File

@@ -0,0 +1,65 @@
// Type definitions for json2md 1.5
// Project: https://github.com/IonicaBizau/json2md#readme
// Definitions by: MartynasZilinskas <https://github.com/MartynasZilinskas>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.3
export = json2md;
/**
* Converts a JSON input to markdown.
*
* @param data The input JSON data.
* @param prefix A snippet to add before each line.
* @return The generated markdown result.
*/
declare function json2md(data: json2md.DataObject | json2md.DataObject[] | string | string[], prefix?: string): string;
type json2md = typeof json2md;
declare namespace json2md {
const converters: ConvertersMethods;
namespace DefaultConverters {
interface Converters {
[converter: string]: any;
blockquote: string | string[];
code: CodeInput;
h1: string | string[];
h2: string | string[];
h3: string | string[];
h4: string | string[];
h5: string | string[];
h6: string | string[];
img: ImgInput | ImgInput[];
ol: string[];
p: string | string[];
table: TableInput;
ul: string[];
}
interface ImgInput {
title: string;
source: string;
}
interface CodeInput {
language?: string;
content: string | string[];
}
interface TableInput {
headers: string[];
rows: Array<{ [column: string]: string }> | string[][];
}
}
type DataObject = {
[TConverter in keyof DefaultConverters.Converters]?: DefaultConverters.Converters[TConverter]
};
type ConverterCallback<TInput> = (input: TInput, json2md: json2md) => string;
type ConvertersMethods = {
[TConverter in keyof DefaultConverters.Converters]: ConverterCallback<DefaultConverters.Converters[TConverter]>
};
}

View File

@@ -0,0 +1,210 @@
import * as json2md from 'json2md';
declare function describe(desc: string, f: () => void): void;
declare function it(desc: string, f: () => void): void;
const EXAMPLE_STRING: string = "example string";
const EXAMPLE_STRING_ARRAY: string[] = ["A", "B"];
describe("Default elements", () => {
it("Headings", () => {
json2md([
{
h1: EXAMPLE_STRING
},
{
h2: EXAMPLE_STRING
},
{
h3: EXAMPLE_STRING
},
{
h4: EXAMPLE_STRING
},
{
h5: EXAMPLE_STRING
},
{
h6: EXAMPLE_STRING
}
]);
});
it("Paragraphs", () => {
json2md([{
p: EXAMPLE_STRING
}]);
json2md([{
p: EXAMPLE_STRING_ARRAY
}]);
});
it("Blockquote", () => {
json2md([{
blockquote: EXAMPLE_STRING
}]);
json2md([{
blockquote: EXAMPLE_STRING_ARRAY
}]);
});
it("Image", () => {
json2md([{
img: {
title: EXAMPLE_STRING,
source: EXAMPLE_STRING
}
}]);
json2md([{
img: [
{
title: EXAMPLE_STRING,
source: EXAMPLE_STRING
}
]
}]);
});
it("Unordered list", () => {
json2md([
{
ul: EXAMPLE_STRING_ARRAY
}
]);
});
it("Ordered list", () => {
json2md([
{
ol: EXAMPLE_STRING_ARRAY
}
]);
});
it("Code block element", () => {
json2md([
{
code: {
language: "js",
content: EXAMPLE_STRING
}
}
]);
});
it("Table", () => {
json2md([
{
table: {
headers: EXAMPLE_STRING_ARRAY,
rows: [
{
A: EXAMPLE_STRING,
B: EXAMPLE_STRING
}
]
}
}
]);
json2md([
{
table: {
headers: EXAMPLE_STRING_ARRAY,
rows: [
EXAMPLE_STRING_ARRAY
]
}
}
]);
});
});
it("Custom types", () => {
const customConverter: json2md.ConverterCallback<string> = (input, json2md) => {
return `Hello ${input} world!`;
};
json2md.converters.customConverter = customConverter;
json2md([
{
customConverter: EXAMPLE_STRING
}
]);
});
it("Big example", () => {
const md: string = json2md([
{
h1: "JSON To Markdown"
},
{
blockquote: "A JSON to Markdown converter."
},
{
img: [
{
title: "Some image",
source: "https://example.com/some-image.png"
},
{
title: "Another image",
source: "https://example.com/some-image1.png"
},
{
title: "Yet another image",
source: "https://example.com/some-image2.png"
}
]
},
{
h2: "Features"
},
{
ul: [
"Easy to use",
"You can programatically generate Markdown content",
"..."
]
},
{
h2: "How to contribute"
},
{
ol: [
"Fork the project",
"Create your branch",
"Raise a pull request"
]
},
{
h2: "Code blocks"
},
{
p: "Below you can see a code block example."
},
{
code: {
language: "js",
content: [
"function sum (a, b) {",
" return a + b;",
"}",
"sum(1, 2);"
]
}
}
]);
});
it("Use converter", () => {
const blockquote: string = json2md.converters.blockquote(EXAMPLE_STRING, json2md);
const img: string = json2md.converters.img({
title: EXAMPLE_STRING,
source: EXAMPLE_STRING
}, json2md);
});

View File

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

View File

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