diff options
Diffstat (limited to 'encoding/README.md')
-rw-r--r-- | encoding/README.md | 131 |
1 files changed, 116 insertions, 15 deletions
diff --git a/encoding/README.md b/encoding/README.md index e30d972f3..f03e80ba2 100644 --- a/encoding/README.md +++ b/encoding/README.md @@ -1,11 +1,112 @@ -# TOML +# Encoding + +## CSV + +- **`readAll(reader: BufReader, opt: ParseOptions = { comma: ",", trimLeadingSpace: false, lazyQuotes: false } ): Promise<[string[][], BufState]>`**: + Read the whole buffer and output the structured CSV datas +- **`parse(csvString: string, opt: ParseOption): Promise<unknown[]>`**: + See [parse](###Parse) + +### Parse + +Parse the CSV string with the options provided. + +#### Options + +##### ParseOption + +- **`header: boolean | string[] | HeaderOption[];`**: If a boolean is provided, + the first line will be used as Header definitions. If `string[]` or + `HeaderOption[]` + those names will be used for header definition. +- **`parse?: (input: unknown) => unknown;`**: Parse function for the row, which + will be executed after parsing of all columns. Therefore if you don't provide + header and parse function with headers, input will be `string[]`. + +##### HeaderOption + +- **`name: string;`**: Name of the header to be used as property. +- **`parse?: (input: string) => unknown;`**: Parse function for the column. + This is executed on each entry of the header. This can be combined with the + Parse function of the rows. + +#### Usage + +```ts +// input: +// a,b,c +// e,f,g + +const r = await parseFile(filepath, { + header: false +}); +// output: +// [["a", "b", "c"], ["e", "f", "g"]] + +const r = await parseFile(filepath, { + header: true +}); +// output: +// [{ a: "e", b: "f", c: "g" }] + +const r = await parseFile(filepath, { + header: ["this", "is", "sparta"] +}); +// output: +// [ +// { this: "a", is: "b", sparta: "c" }, +// { this: "e", is: "f", sparta: "g" } +// ] + +const r = await parseFile(filepath, { + header: [ + { + name: "this", + parse: (e: string): string => { + return `b${e}$$`; + } + }, + { + name: "is", + parse: (e: string): number => { + return e.length; + } + }, + { + name: "sparta", + parse: (e: string): unknown => { + return { bim: `boom-${e}` }; + } + } + ] +}); +// output: +// [ +// { this: "ba$$", is: 1, sparta: { bim: `boom-c` } }, +// { this: "be$$", is: 1, sparta: { bim: `boom-g` } } +// ] + +const r = await parseFile(filepath, { + header: ["this", "is", "sparta"], + parse: (e: Record<string, unknown>) => { + return { super: e.this, street: e.is, fighter: e.sparta }; + } +}); +// output: +// [ +// { super: "a", street: "b", fighter: "c" }, +// { super: "e", street: "f", fighter: "g" } +// ] +``` + +## TOML This module parse TOML files. It follows as much as possible the [TOML specs](https://github.com/toml-lang/toml). Be sure to read the supported types as not every specs is supported at the moment and the handling in TypeScript side is a bit different. -## Supported types and handling +### Supported types and handling - :heavy_check_mark: [Keys](https://github.com/toml-lang/toml#string) - :exclamation: [String](https://github.com/toml-lang/toml#string) @@ -27,39 +128,39 @@ TypeScript side is a bit different. :exclamation: _Supported with warnings see [Warning](#Warning)._ -### :warning: Warning +#### :warning: Warning -#### String +##### String - Regex : Due to the spec, there is no flag to detect regex properly in a TOML declaration. So the regex is stored as string. -#### Integer +##### Integer For **Binary** / **Octal** / **Hexadecimal** numbers, they are stored as string to be not interpreted as Decimal. -#### Local Time +##### Local Time Because local time does not exist in JavaScript, the local time is stored as a string. -#### Inline Table +##### Inline Table Inline tables are supported. See below: ```toml animal = { type = { name = "pug" } } -# Output +## Output animal = { type.name = "pug" } -# Output { animal : { type : { name : "pug" } } +## Output { animal : { type : { name : "pug" } } animal.as.leaders = "tosin" -# Output { animal: { as: { leaders: "tosin" } } } +## Output { animal: { as: { leaders: "tosin" } } } "tosin.abasi" = "guitarist" -# Output +## Output "tosin.abasi" : "guitarist" ``` -#### Array of Tables +##### Array of Tables At the moment only simple declarations like below are supported: @@ -89,9 +190,9 @@ will output: } ``` -## Usage +### Usage -### Parse +#### Parse ```ts import { parse } from "./parser.ts"; @@ -103,7 +204,7 @@ const tomlString = 'foo.bar = "Deno"'; const tomlObject22 = parse(tomlString); ``` -### Stringify +#### Stringify ```ts import { stringify } from "./parser.ts"; |