diff --git a/voca/index.d.ts b/voca/index.d.ts new file mode 100644 index 0000000000..7a7fa6e6c5 --- /dev/null +++ b/voca/index.d.ts @@ -0,0 +1,304 @@ +// Type definitions for Voca 1.2 +// Project: https://vocajs.com/ +// Definitions by: Pine Mizune +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare var v: v.VocaStatic; + +export = v; +export as namespace v; + +declare namespace v { + type CountPredicate = (character: string, index: number, str: string) => boolean; + type ReplacementFunction = (match?: string, ...groups: string[]) => string; + + interface WordWrapOptions { + width?: number; + newLine?: string; + indent?: string; + cut?: boolean; + } + + interface VocaStatic { + // Case + camelCase(subject?: string): string; + capitalize(subject?: string, restToLower?: boolean): string; + decapitalize(subject?: string): string; + kebabCase(subject?: string): string; + lowerCase(subject?: string): string; + snakeCase(subject?: string): string; + titleCase(subject?: string, ignoreWords?: string[]): string; + upperCase(subject?: string): string; + + // Chain + (subject: any): Chain; + chain(subject: T): ExplicitChain; + + // Chop + charAt(subject?: string, position?: number): string; + codePointAt(subject?: string, position?: number): string; + first(subject?: string, length?: number): string; + graphemeAt(subject?: string, position?: number): string; + last(subject?: string, length?: number): string; + prune(subject?: string, length?: number, end?: string): string; + slice(subject?: string, start?: number, end?: number): string; + substr(subject?: string, start?: number, length?: number): string; + substring(subject?: string, start?: number, end?: number): string; + truncate(subject?: string, length?: number, end?: string): string; + + // Count + count(subject?: string): number; + countGraphemes(subject?: string): number; + countSubstrings(subject?: string, substring?: string): number; + countWhere(subject?: string, predicate?: CountPredicate, context?: any): number; + countWords(subject?: string, pattern?: string|RegExp, flags?: string): number; + + // Escape + escapeHtml(subject?: string): string; + escapeRegExp(subject?: string): string; + unescapeHtml(subject?: string): string; + + // Format + sprintf(format?: string, ...replacements: any[]): string; + vprintf(format?: string, ...replacements: any[]): string; + + // Index + indexOf(subject?: string, search?: string, fromIndex?: number): number; + lastIndexOf(subject?: string, search?: string, fromIndex?: number): number; + search(subject?: string, pattern?: string|RegExp, fromIndex?: number): number; + + // Manipulate + insert(subject?: string, toInsert?: string, position?: number): string; + latinise(subject?: string): string; + pad(subject?: string, length?: number, pad?: string): string; + padLeft(subject?: string, length?: number, pad?: string): string; + padRight(subject?: string, length?: number, pad?: string): string; + repeat(subject?: string, times?: number): string; + replace(subject?: string, pattern?: string|RegExp, replacement?: string|ReplacementFunction): string; + replaceAll(subject?: string, pattern?: string|RegExp, replacement?: string|ReplacementFunction): string; + reverse(subject?: string): string; + reverseGrapheme(subject?: string): string; + slugify(subject?: string): string; + splice(subject?: string, start?: number, deleteCount?: number, toAdd?: string): string; + trim(subject?: string, whitespace?: string): string; + trimLeft(subject?: string, whitespace?: string): string; + trimRight(subject?: string, whitespace?: string): string; + wordWrap(subject?: string, options?: WordWrapOptions): string; + + // Query + endsWith(subject?: string, end?: string, position?: number): boolean; + includes(subject?: string, search?: string, position?: number): boolean; + isAlpha(subject?: string): boolean; + isAlphaDigit(subject?: string): boolean; + isBlank(subject?: string): boolean; + isDigit(subject?: string): boolean; + isEmpty(subject?: string): boolean; + isLowerCase(subject?: string): boolean; + isNumeric(subject?: string): boolean; + isString(subject?: any): boolean; + isUpperCase(subject?: string): boolean; + matches(subject?: string, pattern?: string|RegExp, flags?: string): boolean; + startsWith(subject?: string, start?: string, position?: number): boolean; + + // Split + chars(subject?: string): string[]; + codePoints(subject?: string): number[]; + graphemes(subject?: string): string[]; + split(subject?: string, separator?: string|RegExp, limit?: number): string[]; + words(subject?: string, pattern?: string|RegExp, flag?: string): string[]; + + // Strip + stripBom(subject?: string): string; + stripTags(subject?: string, allowbleTags?: string|string[], replacement?: string): string; + + // Util + noConflict(): VocaStatic; + version: string; + } + + interface Chain { + // Case + camelCase(): Chain; + capitalize(restToLoweropt?: boolean): Chain; + decapitalize(): Chain; + kebabCase(): Chain; + lowerCase(): Chain; + snakeCase(): Chain; + titleCase(ignoreWordsopt?: string[]): Chain; + upperCase(): Chain; + + // Chain + value(): string; + chain(): ExplicitChain; + + // Chop + charAt(position?: number): Chain; + codePointAt(position?: number): Chain; + first(length?: number): Chain; + graphemeAt(position?: number): Chain; + last(length?: number): Chain; + prune(length?: number, end?: string): Chain; + slice(start?: number, end?: number): Chain; + substr(start?: number, length?: number): Chain; + substring(start?: number, end?: number): Chain; + truncate(length?: number, end?: string): Chain; + + // Count + count(): number; + countGraphemes(): number; + countSubstrings(substring?: string): number; + countWhere(predicate?: CountPredicate, context?: any): number; + countWords(pattern?: string|RegExp, flags?: string): number; + + // Escape + escapeHtml(): Chain; + escapeRegExp(): Chain; + unescapeHtml(): Chain; + + // Format + sprintf(...replacements: any[]): Chain; + vprintf(...replacements: any[]): Chain; + + // Index + indexOf(search?: string, fromIndex?: number): number; + lastIndexOf(search?: string, fromIndex?: number): number; + search(pattern?: string|RegExp, fromIndex?: number): number; + + // Multipulate + insert(toInsert?: string, position?: number): Chain; + latinise(): Chain; + pad(length?: number, pad?: string): Chain; + padLeft(length?: number, pad?: string): Chain; + padRight(length?: number, pad?: string): Chain; + repeat(times?: number): Chain; + replace(pattern?: string|RegExp, replacement?: string|ReplacementFunction): Chain; + replaceAll(pattern?: string|RegExp, replacement?: string|ReplacementFunction): Chain; + reverse(): Chain; + reverseGrapheme(): Chain; + slugify(): Chain; + splice(start?: number, deleteCount?: number, toAdd?: string): Chain; + trim(whitespace?: string): Chain; + trimLeft(whitespace?: string): Chain; + trimRight(whitespace?: string): Chain; + wordWrap(options?: WordWrapOptions): Chain; + + // Query + endsWith(end?: string, position?: number): boolean; + includes(search?: string, position?: number): boolean; + isAlpha(): boolean; + isAlphaDigit(): boolean; + isBlank(): boolean; + isDigit(): boolean; + isEmpty(): boolean; + isLowerCase(): boolean; + isNumeric(): boolean; + isString(): boolean; + isUpperCase(): boolean; + matches(pattern?: string|RegExp, flags?: string): boolean; + startsWith(start?: string, position?: number): boolean; + + // Split + chars(): string[]; + codePoints(): number[]; + graphemes(): string[]; + split(separator?: string|RegExp, limit?: number): string[]; + words(pattern?: string|RegExp, flag?: string): string[]; + + // Strip + stripBom(): Chain; + stripTags(allowbleTags?: string|string[], replacement?: string): Chain; + } + + interface ExplicitChain { + // Case + camelCase(): ExplicitChain; + capitalize(restToLoweropt?: boolean): ExplicitChain; + decapitalize(): ExplicitChain; + kebabCase(): ExplicitChain; + lowerCase(): ExplicitChain; + snakeCase(): ExplicitChain; + titleCase(ignoreWordsopt?: string[]): ExplicitChain; + upperCase(): ExplicitChain; + + // Chain + value(): T; + thru(changer: (subjects: T) => U): ExplicitChain; + + // Chop + charAt(position?: number): ExplicitChain; + codePointAt(position?: number): ExplicitChain; + first(length?: number): ExplicitChain; + graphemeAt(position?: number): ExplicitChain; + last(length?: number): ExplicitChain; + prune(length?: number, end?: string): ExplicitChain; + slice(start?: number, end?: number): ExplicitChain; + substr(start?: number, length?: number): ExplicitChain; + substring(start?: number, end?: number): ExplicitChain; + truncate(length?: number, end?: string): ExplicitChain; + + // Count + count(): ExplicitChain; + countGraphemes(): ExplicitChain; + countSubstrings(substring?: string): ExplicitChain; + countWhere(predicate?: CountPredicate, context?: any): ExplicitChain; + countWords(pattern?: string|RegExp, flags?: string): ExplicitChain; + + // Escape + escapeHtml(): ExplicitChain; + escapeRegExp(): ExplicitChain; + unescapeHtml(): ExplicitChain; + + // Format + sprintf(...replacements: any[]): ExplicitChain; + vprintf(...replacements: any[]): ExplicitChain; + + // Index + indexOf(search?: string, fromIndex?: number): ExplicitChain; + lastIndexOf(search?: string, fromIndex?: number): ExplicitChain; + search(pattern?: string|RegExp, fromIndex?: number): ExplicitChain; + + // Multipulate + insert(toInsert?: string, position?: number): ExplicitChain; + latinise(): ExplicitChain; + pad(length?: number, pad?: string): ExplicitChain; + padLeft(length?: number, pad?: string): ExplicitChain; + padRight(length?: number, pad?: string): ExplicitChain; + repeat(times?: number): ExplicitChain; + replace(pattern?: string|RegExp, replacement?: string|ReplacementFunction): ExplicitChain; + replaceAll(pattern?: string|RegExp, replacement?: string|ReplacementFunction): ExplicitChain; + reverse(): ExplicitChain; + reverseGrapheme(): ExplicitChain; + slugify(): ExplicitChain; + splice(start?: number, deleteCount?: number, toAdd?: string): ExplicitChain; + trim(whitespace?: string): ExplicitChain; + trimLeft(whitespace?: string): ExplicitChain; + trimRight(whitespace?: string): ExplicitChain; + wordWrap(options?: WordWrapOptions): ExplicitChain; + + // Query + endsWith(end?: string, position?: number): ExplicitChain; + includes(search?: string, position?: number): ExplicitChain; + isAlpha(): ExplicitChain; + isAlphaDigit(): ExplicitChain; + isBlank(): ExplicitChain; + isDigit(): ExplicitChain; + isEmpty(): ExplicitChain; + isLowerCase(): ExplicitChain; + isNumeric(): ExplicitChain; + isString(): ExplicitChain; + isUpperCase(): ExplicitChain; + matches(pattern?: string|RegExp, flags?: string): ExplicitChain; + startsWith(start?: string, position?: number): ExplicitChain; + + // Split + chars(): ExplicitChain; + codePoints(): ExplicitChain; + graphemes(): ExplicitChain; + split(separator?: string|RegExp, limit?: number): ExplicitChain; + words(pattern?: string|RegExp, flag?: string): ExplicitChain; + + // Strip + stripBom(): ExplicitChain; + stripTags(allowbleTags?: string|string[], replacement?: string): ExplicitChain; + } +} diff --git a/voca/tsconfig.json b/voca/tsconfig.json new file mode 100644 index 0000000000..e7cd2ff035 --- /dev/null +++ b/voca/tsconfig.json @@ -0,0 +1,23 @@ + +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "voca-tests.ts" + ] +} diff --git a/voca/tslint.json b/voca/tslint.json new file mode 100644 index 0000000000..377cc837d4 --- /dev/null +++ b/voca/tslint.json @@ -0,0 +1 @@ +{ "extends": "../tslint.json" } diff --git a/voca/voca-tests.ts b/voca/voca-tests.ts new file mode 100644 index 0000000000..3fb9d100c3 --- /dev/null +++ b/voca/voca-tests.ts @@ -0,0 +1,331 @@ +import v = require('voca'); + +var str: string; +var num: number +var bool: boolean; +var strAry: string[]; +var numAry: number[]; + +// Case +str = v.camelCase(); +str = v.camelCase('bird flight'); +str = v('bird flight').camelCase().value(); +str = v.chain('bird flight').camelCase().value(); + +str = v.capitalize(); +str = v.capitalize('apple'); +str = v.capitalize('aPPle', true); +str = v('apple').capitalize().value(); +str = v('apple').capitalize(true).value(); +str = v.chain('apple').capitalize(true).value(); + +str = v.decapitalize('Sun'); +str = v.kebabCase('goodbye blue sky'); +str = v.lowerCase('Green'); +str = v.snakeCase('learning to fly'); +str = v.titleCase('learning to fly'); +str = v.titleCase('another brick in the wall', ['in', 'the']); +str = v.upperCase('school'); + +// Chain +strAry = v('Back to School') + .lowerCase() + .words(); +str = v(" Back to School ") + .trim() + .truncate(7) + .value(); + +strAry = v + .chain('Back to School') + .lowerCase() + .words() + .value(); + +strAry = v('Back to School') + .chain() + .lowerCase() + .words() + .value(); +str = v(" Back to School ") + .chain() + .trim() + .truncate(7) + .value(); + +str = v + .chain('sun is shining') + .words() + .thru((words: string[]) => { + return words[0]; + }) + .value(); + +str = v + .chain('Hello world') + .replace('Hello', 'Hi') + .lowerCase() + .slugify() + .value(); +str = v(' Space travel ') + .trim() + .truncate(8) + .value(); + +// Chop +str = v.charAt('helicopter', 0); +str = v('helicopter').charAt(0).value(); +str = v.chain('helicopter').charAt(0).value(); + +str = v.codePointAt('rain', 1); +str = v.first('helicopter'); +str = v.first('vehicle', 2); +str = v.graphemeAt('\uD835\uDC00\uD835\uDC01', 0); +str = v.last('helicopter'); +str = v.last('vehicle', 2); +str = v.prune('Once upon a time', 7); +str = v.prune('Good day, Little Red Riding Hood', 16, ' (more)'); +str = v.slice('miami', 1); +str = v.slice('florida', 1, 4); +str = v.substr('infinite loop', 9); +str = v.substr('dreams', 2, 2); +str = v.substring('beach', 1); +str = v.substring('ocean', 1, 3); +str = v.truncate('Once upon a time', 7); +str = v.truncate('Good day, Little Red Riding Hood', 14, ' (...)'); + +// Count +num = v.count(); +num = v.count('rain'); +num = v('rain').count(); +num = v.chain('rain').count().value(); + +num = v.countGraphemes('cafe\u0301'); +num = v.countSubstrings('bad boys, bad boys whatcha gonna do?', 'boys'); +num = v.countWhere('hola!', v.isAlpha); +num = v.countWhere('2022', (character: string, index: number, str: string) => { + return character === '2'; +}); +num = v.countWords('gravity can cross dimensions'); + +// Escape +str = v.escapeHtml(); +str = v.escapeHtml('

wonderful world

'); +str = v('

wonderful world

').escapeHtml().value(); +str = v.chain('

wonderful world

').escapeHtml().value(); + +str = v.escapeRegExp(); +str = v.escapeRegExp('(hours)[minutes]{seconds}'); +str = v('(hours)[minutes]{seconds}').escapeRegExp().value(); +str = v.chain('(hours)[minutes]{seconds}').escapeRegExp().value(); + +str = v.unescapeHtml(); +str = v.unescapeHtml('<p>wonderful world</p>'); +str = v('<p>wonderful world</p>').unescapeHtml().value(); +str = v.chain('<p>wonderful world</p>').unescapeHtml().value(); + +// Format +str = v.sprintf(); +str = v.sprintf('%s, %s!', 'Hello', 'World'); +str = v.sprintf('%s costs $%d', 'coffee', 2); +str = v.sprintf('%1$s %2$s %1$s %2$s, watcha gonna %3$s', 'bad', 'boys', 'do') +str = v.sprintf('% 6s', 'bird'); +str = v.sprintf('%d %i %+d', 15, -2, 25); +str = v.sprintf("%06d", 15); +str = v.sprintf('%.2e %g', 100.5, 0.455); +str = v('%s, %s!').sprintf('Hello', 'World').value(); +str = v.chain('%s, %s!').sprintf('Hello', 'World').value(); + +str = v.vprintf(); +str = v.vprintf('%s', ['Welcome']) +str = v.vprintf('%s has %d apples', ['Alexandra', 3]); +str = v('%s').vprintf(['Welcome']).value(); +str = v.chain('%s').vprintf(['Welcome']).value(); + +// Index +num = v.indexOf(); +num = v.indexOf('morning'); +num = v.indexOf('morning', 'n'); +num = v('morning').indexOf('n'); +num = v.chain('morning').indexOf('n').value(); + +num = v.lastIndexOf(); +num = v.lastIndexOf('morning'); +num = v.lastIndexOf('morning', 'n'); +num = v('morning').lastIndexOf('n'); +num = v.chain('morning').lastIndexOf('n').value(); + +num = v.search('morning', /rn/); +num = v.search('evening', '/\d/'); + +// Manipulate +str = v.insert(); +str = v.insert('ct'); +str = v.insert('ct', 'a'); +str = v.insert('ct', 'a', 1); +str = v('ct').insert('a', 1).value(); +str = v.chain('ct').insert('a', 1).value(); + +str = v.latinise(); +str = v.latinise('cafe\u0301'); + +str = v.pad(); +str = v.pad('dog'); +str = v.pad('dog', 5); +str = v.pad('bird', 6, '-'); + +str = v.padLeft(); +str = v.padLeft('dog'); +str = v.padLeft('dog', 5); +str = v.padLeft('bird', 6, '-'); + +str = v.padRight(); +str = v.padRight('dog'); +str = v.padRight('dog', 5); +str = v.padRight('bird', 6, '-'); + +str = v.repeat(); +str = v.repeat('w'); +str = v.repeat('w', 3); + +str = v.replace(); +str = v.replace('swan', 'wa', 'u'); +str = v.replace('domestic duck', /domestic\s/, ''); +str = v.replace('nice duck', /(nice)(duck)/, (match: string, nice: string, duck: string) => { + return 'the ' + duck + ' is ' + nice; +}); + +str = v.replaceAll(); +str = v.replaceAll('good morning', 'o', '*'); +str = v.replaceAll('evening', /n/, 's'); + +str = v.reverse(); +str = v.reverse('winter'); + +str = v.reverseGrapheme(); +str = v.reverseGrapheme('summer'); + +str = v.slugify(); +str = v.slugify('Italian cappuccino drink'); + +str = v.splice(); +str = v.splice('new year'); +str = v.splice('new year', 0); +str = v.splice('new year', 0, 4); +str = v.splice('new year', 0, 3, 'happy'); + +str = v.trim(); +str = v.trim(' Mother nature '); +str = v.trim('--Earth--', '-'); + +str = v.trimLeft(); +str = v.trimLeft(' Starship Troopers'); +str = v.trimLeft('***Mobile Infantry', '*'); + +str = v.trimRight(); +str = v.trimRight('the fire rises '); +str = v.trimRight('do you feel in charge?!!!', '!'); + +str = v.wordWrap(); +str = v.wordWrap('Hello world'); +str = v.wordWrap('Hello world', { + width: 5 +}); +str = v.wordWrap('Hello world', { + width: 5, + newLine: '
', + indent: '__' +}); +str = v.wordWrap('Wonderful world', { + width: 5, + cut: true +}); + +// Query +bool = v.endsWith(); +bool = v.endsWith('red alert'); +bool = v.endsWith('red alert', 'alert'); +bool = v.endsWith('Murphy', 'ph', 5); +bool = v('Murphy').endsWith('ph', 5); +bool = v.chain('Murphy').endsWith('ph', 5).value(); + +bool = v.includes(); +bool = v.includes('starship'); +bool = v.includes('starship', 'star'); +bool = v.includes('galaxy', 'g', 1); +bool = v('galaxy').includes('g', 1); +bool = v.chain('galaxy').includes('g', 1).value(); + +bool = v.isAlpha(); +bool = v.isAlpha('bart'); + +bool = v.isAlphaDigit(); +bool = v.isAlphaDigit('year2020'); + +bool = v.isBlank(); +bool = v.isBlank(''); + +bool = v.isDigit(); +bool = v.isDigit('35'); + +bool = v.isEmpty(); +bool = v.isEmpty(''); + +bool = v.isLowerCase(); +bool = v.isLowerCase('motorcycle'); + +bool = v.isNumeric(); +bool = v.isNumeric('350'); + +bool = v.isString(); +bool = v.isString('vacation'); +bool = v.isString(560); +bool = v('vacation').isString(); +bool = v(560).isString(); +bool = v.chain('vacation').isString().value(); +bool = v.chain(560).isString().value(); + +bool = v.isUpperCase(); +bool = v.isUpperCase('ACDC'); + +bool = v.matches(); +bool = v.matches('pluto'); +bool = v.matches('pluto', /plu.{2}/); +bool = v.matches('sun', 'S', 'i'); +bool = v.matches('apollo 11', '\\d{3}'); + +bool = v.startsWith(); +bool = v.startsWith('say hello to my little friend'); +bool = v.startsWith('say hello to my little friend', 'say hello'); +bool = v.startsWith('tony', 'on', 1); +bool = v.startsWith('the world is yours', 'world'); + +// Split +strAry = v.chars(); +strAry = v.chars('cloud'); + +numAry = v.codePoints(); +numAry = v.codePoints('rain'); + +strAry = v.graphemes(); +strAry = v.graphemes('\uD835\uDC00\uD835\uDC01'); + +strAry = v.split('rage against the dying of the light', ' '); +strAry = v.split('the dying of the light', /\s/, 3); + +strAry = v.words(); +strAry = v.words('gravity can cross dimensions'); +strAry = v.words('Earth gravity', /[^\s]+/g); + +// Strip +str = v.stripBom(); +str = v.stripBom('\uFEFFsummertime sadness'); + +str = v.stripTags(); +str = v.stripTags('Summer is nice'); +str = v.stripTags('Winter is cold', ['b', 'i']); +str = v.stripTags('Sun
set', '', '-'); + +// Util +var voca: v.VocaStatic = v.noConflict(); +var version: String = v.version;