@mathigon/core
Advanced tools
Comparing version 1.0.4 to 1.0.5
@@ -42,2 +42,4 @@ /** Creates an array of size `n`, containing `value` at every entry. */ | ||
export declare function join<T = unknown>(...arrays: T[][]): T[]; | ||
/** Converts a 2D array to CSV data. */ | ||
export declare function toCSV(data: unknown[][]): string; | ||
declare type LinkedListItem<T> = { | ||
@@ -44,0 +46,0 @@ val: T; |
@@ -16,3 +16,2 @@ var __defProp = Object.defineProperty; | ||
LinkedList: () => LinkedList, | ||
applyDefaults: () => applyDefaults, | ||
autoCorrect: () => autoCorrect, | ||
@@ -50,2 +49,3 @@ cache: () => cache, | ||
throttle: () => throttle, | ||
toCSV: () => toCSV, | ||
toCamelCase: () => toCamelCase, | ||
@@ -72,9 +72,2 @@ toTitleCase: () => toTitleCase, | ||
} | ||
function applyDefaults(obj, defaults) { | ||
for (const key of Object.keys(defaults)) { | ||
if (!Object.prototype.hasOwnProperty.call(obj, key)) | ||
obj[key] = defaults[key]; | ||
} | ||
return obj; | ||
} | ||
var defaultMerge = (a, b) => a.concat(b); | ||
@@ -157,7 +150,13 @@ function deepExtend(obj1, obj2, arrayMergeFn = defaultMerge) { | ||
} | ||
function safeToJSON(str, fallback = {}) { | ||
function reviver(allowed) { | ||
return function(key, value) { | ||
if (!key || Array.isArray(this) || allowed.includes(key)) | ||
return value; | ||
}; | ||
} | ||
function safeToJSON(str, fallback, allowedKeys) { | ||
if (!str) | ||
return fallback; | ||
try { | ||
return JSON.parse(str) || fallback; | ||
return JSON.parse(str, allowedKeys ? reviver(allowedKeys) : void 0) || fallback; | ||
} catch (e) { | ||
@@ -266,2 +265,10 @@ return fallback; | ||
} | ||
function toCSV(data) { | ||
return data.map((row) => row.map((x) => { | ||
let cell = x ? `${x}` : ""; | ||
if (cell.match(/[,\n"']/)) | ||
cell = `"${cell.replace(/"/g, '""')}"`; | ||
return cell; | ||
}).join(",")).join("\n"); | ||
} | ||
var LinkedList = class { | ||
@@ -268,0 +275,0 @@ constructor(items) { |
@@ -13,9 +13,2 @@ // src/utilities.ts | ||
} | ||
function applyDefaults(obj, defaults) { | ||
for (const key of Object.keys(defaults)) { | ||
if (!Object.prototype.hasOwnProperty.call(obj, key)) | ||
obj[key] = defaults[key]; | ||
} | ||
return obj; | ||
} | ||
var defaultMerge = (a, b) => a.concat(b); | ||
@@ -98,7 +91,13 @@ function deepExtend(obj1, obj2, arrayMergeFn = defaultMerge) { | ||
} | ||
function safeToJSON(str, fallback = {}) { | ||
function reviver(allowed) { | ||
return function(key, value) { | ||
if (!key || Array.isArray(this) || allowed.includes(key)) | ||
return value; | ||
}; | ||
} | ||
function safeToJSON(str, fallback, allowedKeys) { | ||
if (!str) | ||
return fallback; | ||
try { | ||
return JSON.parse(str) || fallback; | ||
return JSON.parse(str, allowedKeys ? reviver(allowedKeys) : void 0) || fallback; | ||
} catch (e) { | ||
@@ -207,2 +206,10 @@ return fallback; | ||
} | ||
function toCSV(data) { | ||
return data.map((row) => row.map((x) => { | ||
let cell = x ? `${x}` : ""; | ||
if (cell.match(/[,\n"']/)) | ||
cell = `"${cell.replace(/"/g, '""')}"`; | ||
return cell; | ||
}).join(",")).join("\n"); | ||
} | ||
var LinkedList = class { | ||
@@ -652,3 +659,2 @@ constructor(items) { | ||
LinkedList, | ||
applyDefaults, | ||
autoCorrect, | ||
@@ -686,2 +692,3 @@ cache, | ||
throttle, | ||
toCSV, | ||
toCamelCase, | ||
@@ -688,0 +695,0 @@ toTitleCase, |
@@ -11,4 +11,2 @@ /** Object Map Interface. */ | ||
export declare function isOneOf<T>(x: T, ...values: T[]): boolean; | ||
/** Applies default keys to an object. Properties with value `undefined` or `null` will **not** be overwritten. */ | ||
export declare function applyDefaults<O extends Obj<unknown>, D extends Obj<unknown>>(obj: O, defaults: D): O & D; | ||
/** Deep extends obj1 with obj2, using a custom array merge function. */ | ||
@@ -43,2 +41,2 @@ export declare function deepExtend(obj1: any, obj2: any, arrayMergeFn?: (a: unknown[], b: unknown[]) => unknown[]): void; | ||
/** Safe wrapper for JSON.parse. */ | ||
export declare function safeToJSON(str?: string, fallback?: unknown): unknown; | ||
export declare function safeToJSON<T>(str?: string | null, fallback?: T, allowedKeys?: string[]): T | undefined; |
{ | ||
"name": "@mathigon/core", | ||
"version": "1.0.4", | ||
"version": "1.0.5", | ||
"license": "MIT", | ||
@@ -5,0 +5,0 @@ "homepage": "https://mathigon.io/core", |
@@ -161,2 +161,13 @@ // ============================================================================= | ||
/** Converts a 2D array to CSV data. */ | ||
export function toCSV(data: unknown[][]) { | ||
return data.map(row => row.map(x => { | ||
let cell = x ? `${x}` : ''; | ||
if (cell.match(/[,\n"']/)) cell = `"${cell.replace(/"/g, '""')}"`; | ||
return cell; | ||
}).join(',')).join('\n'); | ||
} | ||
type LinkedListItem<T> = {val: T, prev: LinkedListItem<T>, next: LinkedListItem<T>}; | ||
@@ -163,0 +174,0 @@ |
@@ -29,11 +29,3 @@ // ============================================================================= | ||
/** Applies default keys to an object. Properties with value `undefined` or `null` will **not** be overwritten. */ | ||
export function applyDefaults<O extends Obj<unknown>, D extends Obj<unknown>>(obj: O, defaults: D) { | ||
for (const key of Object.keys(defaults)) { | ||
if (!Object.prototype.hasOwnProperty.call(obj, key)) (obj as Obj<unknown>)[key] = defaults[key]; | ||
} | ||
return obj as O & D; | ||
} | ||
const defaultMerge = ((a: unknown[], b: unknown[]) => a.concat(b)); | ||
@@ -151,7 +143,15 @@ | ||
function reviver(allowed: string[]) { | ||
// Filter only specific keys in a JSON object. | ||
return function(this: unknown, key: string, value: unknown) { | ||
// eslint-disable-next-line no-invalid-this | ||
if (!key || Array.isArray(this) || allowed.includes(key)) return value; | ||
}; | ||
} | ||
/** Safe wrapper for JSON.parse. */ | ||
export function safeToJSON(str?: string, fallback: unknown = {}): unknown { | ||
export function safeToJSON<T>(str?: string|null, fallback?: T, allowedKeys?: string[]): T|undefined { | ||
if (!str) return fallback; | ||
try { | ||
return JSON.parse(str) || fallback; | ||
return JSON.parse(str, allowedKeys ? reviver(allowedKeys) : undefined) || fallback; | ||
} catch (e) { | ||
@@ -158,0 +158,0 @@ return fallback; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
162264
2543