mirror of
https://github.com/denoland/deno.git
synced 2024-11-23 15:16:54 -05:00
parent
83474802e9
commit
8acdecd72d
3 changed files with 149 additions and 0 deletions
75
strings/pad.ts
Normal file
75
strings/pad.ts
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
|
/** FillOption Object */
|
||||||
|
export interface FillOption {
|
||||||
|
/** Char to fill in */
|
||||||
|
char: string;
|
||||||
|
/** Side to fill in */
|
||||||
|
side: "left" | "right";
|
||||||
|
/** If strict, output string can't be greater than strLen*/
|
||||||
|
strict?: boolean;
|
||||||
|
/** char/string used to specify the string has been truncated */
|
||||||
|
strictChar?: string;
|
||||||
|
/** Side of truncate */
|
||||||
|
strictSide?: "left" | "right";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pad helper for strings.
|
||||||
|
* Input string is processed to output a string with a minimal length.
|
||||||
|
* If the parameter `strict` is set to true, the output string length
|
||||||
|
* is equal to the `strLen` parameter.
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* pad("deno", 6, { char: "*", side: "left" }) // output : "**deno"
|
||||||
|
* pad("deno", 6, { char: "*", side: "right"}) // output : "deno**"
|
||||||
|
* pad("denosorusrex", 6 {
|
||||||
|
* char: "*",
|
||||||
|
* side: "left",
|
||||||
|
* strict: true,
|
||||||
|
* strictSide: "right",
|
||||||
|
* strictChar: "..."
|
||||||
|
* }) // output : "den..."
|
||||||
|
*
|
||||||
|
* @param input Input string
|
||||||
|
* @param strLen Output string lenght
|
||||||
|
* @param opts Configuration object
|
||||||
|
* @param [opts.char=" "] Character used to fill in
|
||||||
|
* @param [opts.side="left"] Side to fill in
|
||||||
|
* @param [opts.strict=false] Flag to truncate the string if length > strLen
|
||||||
|
* @param [opts.strictChar=""] Character to add if string is truncated
|
||||||
|
* @param [opts.strictSide="right"] Side to truncate
|
||||||
|
*/
|
||||||
|
export function pad(
|
||||||
|
input: string,
|
||||||
|
strLen: number,
|
||||||
|
opts: FillOption = {
|
||||||
|
char: " ",
|
||||||
|
strict: false,
|
||||||
|
side: "left",
|
||||||
|
strictChar: "",
|
||||||
|
strictSide: "right"
|
||||||
|
}
|
||||||
|
): string {
|
||||||
|
let out = input;
|
||||||
|
const outL = out.length;
|
||||||
|
if (outL < strLen) {
|
||||||
|
if (opts.side === "left") {
|
||||||
|
out = out.padStart(strLen, opts.char);
|
||||||
|
} else {
|
||||||
|
out = out.padEnd(strLen, opts.char);
|
||||||
|
}
|
||||||
|
} else if (opts.strict && outL > strLen) {
|
||||||
|
let addChar = opts.strictChar ? opts.strictChar : "";
|
||||||
|
if (opts.strictSide === "left") {
|
||||||
|
let toDrop = outL - strLen;
|
||||||
|
if (opts.strictChar) {
|
||||||
|
toDrop += opts.strictChar.length;
|
||||||
|
}
|
||||||
|
out = `${addChar}${out.slice(toDrop, outL)}`;
|
||||||
|
} else {
|
||||||
|
out = `${out.substring(0, strLen - addChar.length)}${addChar}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
73
strings/pad_test.ts
Normal file
73
strings/pad_test.ts
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
import { test } from "../testing/mod.ts";
|
||||||
|
import { assertEquals } from "../testing/asserts.ts";
|
||||||
|
import { pad } from "./pad.ts";
|
||||||
|
|
||||||
|
test(function padTest() {
|
||||||
|
const expected1 = "**deno";
|
||||||
|
const expected2 = "deno";
|
||||||
|
const expected3 = "deno**";
|
||||||
|
const expected4 = "denosorusrex";
|
||||||
|
const expected5 = "denosorus";
|
||||||
|
const expected6 = "sorusrex";
|
||||||
|
const expected7 = "den...";
|
||||||
|
const expected8 = "...rex";
|
||||||
|
assertEquals(pad("deno", 6, { char: "*", side: "left" }), expected1);
|
||||||
|
assertEquals(pad("deno", 4, { char: "*", side: "left" }), expected2);
|
||||||
|
assertEquals(pad("deno", 6, { char: "*", side: "right" }), expected3);
|
||||||
|
assertEquals(
|
||||||
|
pad("denosorusrex", 4, {
|
||||||
|
char: "*",
|
||||||
|
side: "right",
|
||||||
|
strict: false
|
||||||
|
}),
|
||||||
|
expected4
|
||||||
|
);
|
||||||
|
assertEquals(
|
||||||
|
pad("denosorusrex", 9, {
|
||||||
|
char: "*",
|
||||||
|
side: "left",
|
||||||
|
strict: true,
|
||||||
|
strictSide: "right"
|
||||||
|
}),
|
||||||
|
expected5
|
||||||
|
);
|
||||||
|
assertEquals(
|
||||||
|
pad("denosorusrex", 8, {
|
||||||
|
char: "*",
|
||||||
|
side: "left",
|
||||||
|
strict: true,
|
||||||
|
strictSide: "left"
|
||||||
|
}),
|
||||||
|
expected6
|
||||||
|
);
|
||||||
|
assertEquals(
|
||||||
|
pad("denosorusrex", 6, {
|
||||||
|
char: "*",
|
||||||
|
side: "left",
|
||||||
|
strict: true,
|
||||||
|
strictSide: "right",
|
||||||
|
strictChar: "..."
|
||||||
|
}),
|
||||||
|
expected7
|
||||||
|
);
|
||||||
|
assertEquals(
|
||||||
|
pad("denosorusrex", 6, {
|
||||||
|
char: "*",
|
||||||
|
side: "left",
|
||||||
|
strict: true,
|
||||||
|
strictSide: "left",
|
||||||
|
strictChar: "..."
|
||||||
|
}),
|
||||||
|
expected8
|
||||||
|
);
|
||||||
|
assertEquals(
|
||||||
|
pad("deno", 4, {
|
||||||
|
char: "*",
|
||||||
|
side: "left",
|
||||||
|
strict: true,
|
||||||
|
strictSide: "right",
|
||||||
|
strictChar: "..."
|
||||||
|
}),
|
||||||
|
expected2
|
||||||
|
);
|
||||||
|
});
|
1
test.ts
1
test.ts
|
@ -28,6 +28,7 @@ import "./media_types/test.ts";
|
||||||
import "./multipart/formfile_test.ts";
|
import "./multipart/formfile_test.ts";
|
||||||
import "./multipart/multipart_test.ts";
|
import "./multipart/multipart_test.ts";
|
||||||
import "./prettier/main_test.ts";
|
import "./prettier/main_test.ts";
|
||||||
|
import "./strings/pad_test.ts";
|
||||||
import "./testing/test.ts";
|
import "./testing/test.ts";
|
||||||
import "./textproto/test.ts";
|
import "./textproto/test.ts";
|
||||||
import "./ws/test.ts";
|
import "./ws/test.ts";
|
||||||
|
|
Loading…
Reference in a new issue