diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-11-13 12:23:49 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2021-11-13 12:23:49 +0900 |
| commit | 2795fe457909c687f668d020ef65d52abc3182fb (patch) | |
| tree | 0a52e4e4d854333496fcc487560c93c3de5d5eb5 /src/prelude | |
| parent | Merge branch 'develop' (diff) | |
| parent | 12.96.0 (diff) | |
| download | misskey-2795fe457909c687f668d020ef65d52abc3182fb.tar.gz misskey-2795fe457909c687f668d020ef65d52abc3182fb.tar.bz2 misskey-2795fe457909c687f668d020ef65d52abc3182fb.zip | |
Merge branch 'develop'
Diffstat (limited to 'src/prelude')
| -rw-r--r-- | src/prelude/README.md | 3 | ||||
| -rw-r--r-- | src/prelude/array.ts | 138 | ||||
| -rw-r--r-- | src/prelude/await-all.ts | 23 | ||||
| -rw-r--r-- | src/prelude/math.ts | 3 | ||||
| -rw-r--r-- | src/prelude/maybe.ts | 20 | ||||
| -rw-r--r-- | src/prelude/relation.ts | 5 | ||||
| -rw-r--r-- | src/prelude/string.ts | 15 | ||||
| -rw-r--r-- | src/prelude/symbol.ts | 1 | ||||
| -rw-r--r-- | src/prelude/time.ts | 39 | ||||
| -rw-r--r-- | src/prelude/url.ts | 13 | ||||
| -rw-r--r-- | src/prelude/xml.ts | 41 |
11 files changed, 0 insertions, 301 deletions
diff --git a/src/prelude/README.md b/src/prelude/README.md deleted file mode 100644 index bb728cfb1b..0000000000 --- a/src/prelude/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Prelude -このディレクトリのコードはJavaScriptの表現能力を補うためのコードです。 -Misskey固有の処理とは独立したコードの集まりですが、Misskeyのコードを読みやすくすることを目的としています。 diff --git a/src/prelude/array.ts b/src/prelude/array.ts deleted file mode 100644 index d63f0475d0..0000000000 --- a/src/prelude/array.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { EndoRelation, Predicate } from './relation'; - -/** - * Count the number of elements that satisfy the predicate - */ - -export function countIf<T>(f: Predicate<T>, xs: T[]): number { - return xs.filter(f).length; -} - -/** - * Count the number of elements that is equal to the element - */ -export function count<T>(a: T, xs: T[]): number { - return countIf(x => x === a, xs); -} - -/** - * Concatenate an array of arrays - */ -export function concat<T>(xss: T[][]): T[] { - return ([] as T[]).concat(...xss); -} - -/** - * Intersperse the element between the elements of the array - * @param sep The element to be interspersed - */ -export function intersperse<T>(sep: T, xs: T[]): T[] { - return concat(xs.map(x => [sep, x])).slice(1); -} - -/** - * Returns the array of elements that is not equal to the element - */ -export function erase<T>(a: T, xs: T[]): T[] { - return xs.filter(x => x !== a); -} - -/** - * Finds the array of all elements in the first array not contained in the second array. - * The order of result values are determined by the first array. - */ -export function difference<T>(xs: T[], ys: T[]): T[] { - return xs.filter(x => !ys.includes(x)); -} - -/** - * Remove all but the first element from every group of equivalent elements - */ -export function unique<T>(xs: T[]): T[] { - return [...new Set(xs)]; -} - -export function sum(xs: number[]): number { - return xs.reduce((a, b) => a + b, 0); -} - -export function maximum(xs: number[]): number { - return Math.max(...xs); -} - -/** - * Splits an array based on the equivalence relation. - * The concatenation of the result is equal to the argument. - */ -export function groupBy<T>(f: EndoRelation<T>, xs: T[]): T[][] { - const groups = [] as T[][]; - for (const x of xs) { - if (groups.length !== 0 && f(groups[groups.length - 1][0], x)) { - groups[groups.length - 1].push(x); - } else { - groups.push([x]); - } - } - return groups; -} - -/** - * Splits an array based on the equivalence relation induced by the function. - * The concatenation of the result is equal to the argument. - */ -export function groupOn<T, S>(f: (x: T) => S, xs: T[]): T[][] { - return groupBy((a, b) => f(a) === f(b), xs); -} - -export function groupByX<T>(collections: T[], keySelector: (x: T) => string) { - return collections.reduce((obj: Record<string, T[]>, item: T) => { - const key = keySelector(item); - if (!obj.hasOwnProperty(key)) { - obj[key] = []; - } - - obj[key].push(item); - - return obj; - }, {}); -} - -/** - * Compare two arrays by lexicographical order - */ -export function lessThan(xs: number[], ys: number[]): boolean { - for (let i = 0; i < Math.min(xs.length, ys.length); i++) { - if (xs[i] < ys[i]) return true; - if (xs[i] > ys[i]) return false; - } - return xs.length < ys.length; -} - -/** - * Returns the longest prefix of elements that satisfy the predicate - */ -export function takeWhile<T>(f: Predicate<T>, xs: T[]): T[] { - const ys = []; - for (const x of xs) { - if (f(x)) { - ys.push(x); - } else { - break; - } - } - return ys; -} - -export function cumulativeSum(xs: number[]): number[] { - const ys = Array.from(xs); // deep copy - for (let i = 1; i < ys.length; i++) ys[i] += ys[i - 1]; - return ys; -} - -export function toArray<T>(x: T | T[] | undefined): T[] { - return Array.isArray(x) ? x : x != null ? [x] : []; -} - -export function toSingle<T>(x: T | T[] | undefined): T | undefined { - return Array.isArray(x) ? x[0] : x; -} diff --git a/src/prelude/await-all.ts b/src/prelude/await-all.ts deleted file mode 100644 index 24795f3ae5..0000000000 --- a/src/prelude/await-all.ts +++ /dev/null @@ -1,23 +0,0 @@ -type Await<T> = T extends Promise<infer U> ? U : T; - -type AwaitAll<T> = { - [P in keyof T]: Await<T[P]>; -}; - -export async function awaitAll<T>(obj: T): Promise<AwaitAll<T>> { - const target = {} as any; - const keys = Object.keys(obj); - const values = Object.values(obj); - - const resolvedValues = await Promise.all(values.map(value => - (!value || !value.constructor || value.constructor.name !== 'Object') - ? value - : awaitAll(value) - )); - - for (let i = 0; i < keys.length; i++) { - target[keys[i]] = resolvedValues[i]; - } - - return target; -} diff --git a/src/prelude/math.ts b/src/prelude/math.ts deleted file mode 100644 index 07b94bec30..0000000000 --- a/src/prelude/math.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function gcd(a: number, b: number): number { - return b === 0 ? a : gcd(b, a % b); -} diff --git a/src/prelude/maybe.ts b/src/prelude/maybe.ts deleted file mode 100644 index 0b4b543ca5..0000000000 --- a/src/prelude/maybe.ts +++ /dev/null @@ -1,20 +0,0 @@ -export interface IMaybe<T> { - isJust(): this is IJust<T>; -} - -export interface IJust<T> extends IMaybe<T> { - get(): T; -} - -export function just<T>(value: T): IJust<T> { - return { - isJust: () => true, - get: () => value - }; -} - -export function nothing<T>(): IMaybe<T> { - return { - isJust: () => false, - }; -} diff --git a/src/prelude/relation.ts b/src/prelude/relation.ts deleted file mode 100644 index 1f4703f52f..0000000000 --- a/src/prelude/relation.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type Predicate<T> = (a: T) => boolean; - -export type Relation<T, U> = (a: T, b: U) => boolean; - -export type EndoRelation<T> = Relation<T, T>; diff --git a/src/prelude/string.ts b/src/prelude/string.ts deleted file mode 100644 index b907e0a2e1..0000000000 --- a/src/prelude/string.ts +++ /dev/null @@ -1,15 +0,0 @@ -export function concat(xs: string[]): string { - return xs.join(''); -} - -export function capitalize(s: string): string { - return toUpperCase(s.charAt(0)) + toLowerCase(s.slice(1)); -} - -export function toUpperCase(s: string): string { - return s.toUpperCase(); -} - -export function toLowerCase(s: string): string { - return s.toLowerCase(); -} diff --git a/src/prelude/symbol.ts b/src/prelude/symbol.ts deleted file mode 100644 index 51e12f7450..0000000000 --- a/src/prelude/symbol.ts +++ /dev/null @@ -1 +0,0 @@ -export const fallback = Symbol('fallback'); diff --git a/src/prelude/time.ts b/src/prelude/time.ts deleted file mode 100644 index 34e8b6b17c..0000000000 --- a/src/prelude/time.ts +++ /dev/null @@ -1,39 +0,0 @@ -const dateTimeIntervals = { - 'day': 86400000, - 'hour': 3600000, - 'ms': 1, -}; - -export function dateUTC(time: number[]): Date { - const d = time.length === 2 ? Date.UTC(time[0], time[1]) - : time.length === 3 ? Date.UTC(time[0], time[1], time[2]) - : time.length === 4 ? Date.UTC(time[0], time[1], time[2], time[3]) - : time.length === 5 ? Date.UTC(time[0], time[1], time[2], time[3], time[4]) - : time.length === 6 ? Date.UTC(time[0], time[1], time[2], time[3], time[4], time[5]) - : time.length === 7 ? Date.UTC(time[0], time[1], time[2], time[3], time[4], time[5], time[6]) - : null; - - if (!d) throw 'wrong number of arguments'; - - return new Date(d); -} - -export function isTimeSame(a: Date, b: Date): boolean { - return a.getTime() === b.getTime(); -} - -export function isTimeBefore(a: Date, b: Date): boolean { - return (a.getTime() - b.getTime()) < 0; -} - -export function isTimeAfter(a: Date, b: Date): boolean { - return (a.getTime() - b.getTime()) > 0; -} - -export function addTime(x: Date, value: number, span: keyof typeof dateTimeIntervals = 'ms'): Date { - return new Date(x.getTime() + (value * dateTimeIntervals[span])); -} - -export function subtractTime(x: Date, value: number, span: keyof typeof dateTimeIntervals = 'ms'): Date { - return new Date(x.getTime() - (value * dateTimeIntervals[span])); -} diff --git a/src/prelude/url.ts b/src/prelude/url.ts deleted file mode 100644 index c7f2b7c1e7..0000000000 --- a/src/prelude/url.ts +++ /dev/null @@ -1,13 +0,0 @@ -export function query(obj: {}): string { - const params = Object.entries(obj) - .filter(([, v]) => Array.isArray(v) ? v.length : v !== undefined) - .reduce((a, [k, v]) => (a[k] = v, a), {} as Record<string, any>); - - return Object.entries(params) - .map((e) => `${e[0]}=${encodeURIComponent(e[1])}`) - .join('&'); -} - -export function appendQuery(url: string, query: string): string { - return `${url}${/\?/.test(url) ? url.endsWith('?') ? '' : '&' : '?'}${query}`; -} diff --git a/src/prelude/xml.ts b/src/prelude/xml.ts deleted file mode 100644 index 0773f75d47..0000000000 --- a/src/prelude/xml.ts +++ /dev/null @@ -1,41 +0,0 @@ -const map: Record<string, string> = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - '\'': ''' -}; - -const beginingOfCDATA = '<![CDATA['; -const endOfCDATA = ']]>'; - -export function escapeValue(x: string): string { - let insideOfCDATA = false; - let builder = ''; - for ( - let i = 0; - i < x.length; - ) { - if (insideOfCDATA) { - if (x.slice(i, i + beginingOfCDATA.length) === beginingOfCDATA) { - insideOfCDATA = true; - i += beginingOfCDATA.length; - } else { - builder += x[i++]; - } - } else { - if (x.slice(i, i + endOfCDATA.length) === endOfCDATA) { - insideOfCDATA = false; - i += endOfCDATA.length; - } else { - const b = x[i++]; - builder += map[b] || b; - } - } - } - return builder; -} - -export function escapeAttribute(x: string): string { - return Object.entries(map).reduce((a, [k, v]) => a.replace(k, v), x); -} |