Usage
import "https://deno.land/x/this@0.160.1/mod.ts";Table of Contents
This project uses side-effect imports to extend the global namespace of the Deno runtime. It adds various tools from Deno Standard Libraryโs encoding and testing suites.
For example, by importing ./encoding.ts, your project will have access to CSV, JSON5, YAML, and TOML modules (to name a few) at the global level. See all available APIโs below.
encoding
this/encoding exposes all the std/encoding modules from the
Deno Standard Library, along with a few extra goodies too.
import "https://deno.land/x/this@0.160.1/encoding.ts";CSV
import "https://deno.land/x/this@0.160.1/encoding/csv.ts";.parse
CSV.parse(text: string, options?: CSV.ParseOptions): string[][];CSV.parse(text: string, { columns?: CSV.Column[]; }): Record<string, unknown>;.stringify
CSV.stringify(data: CSV.DataItem[], options?: CSV.StringifyOptions): string;Source:
std@0.160.0/encoding/csv.ts
JSONC
import "https://deno.land/x/this@0.160.1/encoding/jsonc.ts";.parse
JSONC.parse(data: string, { allowTrailingComma?: boolean }): JsonValue;.stringify
JSONC.stringify(data: JsonValue, replacer?: (key: string, value: any) => any, space?: string | number): string;JSONC.stringify(data: JsonValue, replacer?: (string | number)[], space?: string | number): string;Source:
std@0.160.0/encoding/jsonc.ts
JSON5
import "https://deno.land/x/this@0.160.1/encoding/json5.ts";.parse
JSON5.parse<T = JSONValue>(text: string, reviver?: JSONReviverFn): T;.stringify
JSON5.stringify(data: JSONValue, replacer?: JSONReplacerFn, space?: string | number): string;.require
JSON5.require<T = JSONValue>(path: string | URL, reviver?: JSONReviverFn): T;.requireAsync
JSON5.require<T = JSONValue>(path: string | URL, reviver?: JSONReviverFn): Promise<T>;JsonStream
import "https://deno.land/x/this@0.160.1/encoding/jsonstream.ts";This is a custom implementation of the Deno Standard Libraryโs JsonStream classes.
Importing jsonstream.ts creates a global named JsonStream with these properties:
.Parse
Shorthand alias for the JsonParseStream class.
Must be called with the new keyword before its constructor, like so:
const stream = new JsonStream.Parse(...options);.Stringify
Shorthand alias for the JsonStringifyStream class.
Must be called with the new keyword before its constructor, like so:
const stream = new JsonStream.Stringify(...options);JsonStringifyStream Documentation
.Concatenated
Shorthand alias for the ConcatenatedJsonParseStream class.
Must be called with the new keyword before its constructor, like so:
const stream = new JsonStream.Concatenated(...options);ConcatenatedJsonParseStream Documentation
.useParse
Shorthand equivalent to calling new JsonStream.Parse(), this creates a new instance of the JsonParseStream class.
const stream = JsonStream.useParse(...options);.useStringify
Shorthand equivalent to calling new JsonStream.Stringify(), this creates a new instance of the JsonStringifyStream class.
const stream = JsonStream.useStringify(...options);.useConcat
Shorthand equivalent to calling new JsonStream.Concatenated(), this creates a new instance of the ConcatenatedJsonParseStream class.
const stream = JsonStream.useConcat(...options);TOML
import "https://deno.land/x/this@0.160.1/encoding/toml.ts";.parse
TOML.parse(text: string): Record<string, unknown>;.stringify
TOML.stringify(data: Record<string, unknown>, options: TOML.FormatOptions): string;Source:
std@0.160.0/encoding/toml.ts
YAML
import "https://deno.land/x/this@0.160.1/encoding/yaml.ts";.parse
YAML.parse(content: string, options?: LoaderStateOptions): unknown;.parseAll
YAML.parseAll(content: string, options?: LoaderStateOptions): unknown;YAML.parseAll(content: string, iterator: CbFunction, options?: LoaderStateOptions);.stringify
YAML.stringify(obj: Record<string, unknown>, options?: DumperStateOptions): string;Source:
std@0.160.0/encoding/yaml.ts
FrontMatter
import "https://deno.land/x/this@0.160.1/encoding/front_matter.ts";.extract
FrontMatter.extract<T = unknown>(str: string): Extract<T>;type Extract<T> = {
frontMatter: string;
body: string;
attrs: T;
}.test
FrontMatter.test(markdown: string): boolean;base64
import "https://deno.land/x/this@0.160.1/encoding/base64.ts";.encode
base64.encode(data: ArrayBuffer | string): string;.decode
base64.decode(b64: string): string;.decodeBytes
base64.decodeBytes(b64: string): Uint8Array;Source:
std@0.160.0/encoding/base64.ts
base64url
import "https://deno.land/x/this@0.160.1/encoding/base64url.ts";.encode
base64.encode(data: BufferSource | string): string;.decode
base64.decode(b64url: string): string;.decodeBytes
base64.decodeBytes(b64url: string): Uint8Array;binary
import "https://deno.land/x/this@0.160.1/encoding/binary.ts";Source:
std@0.160.0/encoding/binary.ts
Hex
import "https://deno.land/x/this@0.160.1/encoding/hex.ts";.encode
Hex.encode(); // TODO.decode
Hex.decode(); // TODOSource:
std@0.160.0/encoding/hex.ts
testing
import "https://deno.land/x/this@0.160.1/testing.ts";Note: due to the size of
chaiandfc, they have been excluded from the imports in the./testing.tsfile. To use them, please import their respective files instead. Or, if you really want to YOLO, you can import all of the testing tools at once. See below.
all
import "https://deno.land/x/this@0.160.1/testing/all.ts";Warning: this Imports everything below add quite a bit of weight to your project.
asserts
import "https://deno.land/x/this@0.160.1/testing/asserts.ts";Source:
std@0.160.0/testing/asserts.ts
bdd
import "https://deno.land/x/this@0.160.1/testing/bdd.ts";beforeAll
let fixture: Set<number>;
let startTime: number, endTime: number;
beforeAll(() => {
fixture = new Set([]);
startTime = Date.now();
});afterAll
afterAll(() => {
fixture.clear();
fixture = undefined;
console.log
});beforeEach
beforeEach(() => {
fixture.clear();
for (let i = 1; i <= 10; i++) fixture.add(i);
});afterEach
afterEach(() => {
fixture = new Set([1, 2, 3, 4]);
});describe
it
Source:
std@0.160.0/testing/bdd.ts
mock
import "https://deno.land/x/this@0.160.1/testing/mock.ts";Source:
std@0.160.0/testing/mock.ts
snapshot
import "https://deno.land/x/this@0.160.1/testing/snapshot.ts";Source:
std@0.160.0/testing/snapshot.ts
chai
import "https://deno.land/x/this@0.160.1/testing/chai.ts";Source:
chai@4.3.4
fc (fastcheck)
import "https://deno.land/x/this@0.160.1/testing/fc.ts";Source:
fast-check@3.2.0
examples
JSONC, JSON5, YAML, TOML
Now you can use CSV, JSON5, JSONC, YAML, TOML (and more), just as easily as you would use JavaScriptโs builtin JSON object. Check it out below.
import "https://deno.land/x/this@0.160.1/encoding.ts";
// deno.jsonc => { "compilerOptions": { "lib": ["deno.ns", "deno.window"] }, ... }
const deno_jsonc = JSONC.parse(await Deno.readTextFile("./deno.jsonc"));
// { compilerOptions: { lib: ["deno.ns", "deno.window"] }, ... }
const deno_json5 = JSON5.stringify(deno_jsonc);
// {compilerOptions:{lib:['deno.ns','deno.window']}, ... }
const deno_toml = TOML.stringify(deno_jsonc);
// [compilerOptions.lib] = ["deno.ns", "deno.window"]
const deno_yml = YAML.stringify(deno_jsonc);
// compilerOptions:
// lib: [deno.ns, deno.window]FrontMatter.extract
import "https://deno.land/x/this@0.160.1/testing/asserts.ts";
import "https://deno.land/x/this@0.160.1/encoding/front_matter.ts";
const { attrs, body, frontMatter } = FrontMatter.extract<{ title: string }>(
"---\ntitle: Three dashes marks the spot\n---\n");
assertEquals(attrs.title, "Three dashes marks the spot");
assertEquals(body, "");
assertEquals(frontMatter, "title: Three dashes marks the spot");describe + it
import "https://deno.land/x/this@0.160.1/testing/bdd.ts";
let users: Map<string, unknown>;
// globally available hooks!
// (beforeAll, afterAll, beforeEach, afterEach)
beforeEach(() => {
users = new Map<string, unknown>();
});
// behavior-driven development (bdd) testing API
describe("Users Map", () => {
it("should initially empty", () => {
assertEquals(users.size, 0);
});
it("should be readable and writable", () => {
users.set("key", "value");
assertEquals(users.size, 1);
assertArrayIncludes([...users.values()], ["value"]);
});
});assertEquals + AssertionError
import "https://deno.land/x/this@0.160.1/testing/asserts.ts";
Deno.test("Global Assertions", async ({ step }) => {
await step("are they equal?", () =>
assertEquals(+new Date("1970-01-01T00:00:00.000Z"), 0);
await step("AssertionError also available", () => {
if (1 !== 1) {
throw new AssertionError("OH NO! 1 != 1?!?! BAD JUJU")
}
});
});chai (chai.js)
import "https://deno.land/x/this@0.160.1/testing/chai.ts";fc
import "https://deno.land/x/this@0.160.1/testing/fc.ts";Contributing
โ ๏ธ Fixing a bug? Create an Issue first
Unless youโre fixing a bug for which an issue already exists!
This allows the issue to be connected to your Pull Request, creating a permanent record of your contribution to the project. It also helps maintainers with tracking project progression.
Creating an issue also ensures youโre given credit for fixing that bug. ๐
Fork + clone the repository
Note: This section assumes you have the GitHub CLI. You should get it.
gh repo fork deno911/this --cloneCreate a new branch for your changes
git checkout -b fix/typo-in-readmeMake small changes and concise commits
# hack hack hack...
git commit README.md -m "fix: typos in README.md" && git pushNote: keep the scope of your changes relevant and concise.
Open a Pull Request
gh pr create --title "fix: typos in README.md"Or just open your repo on GitHub.com and follow the prompts.
Warning: make sure you select the upstream repo for your PR!
