TypeScript related things
Last active
October 6, 2020 20:52
-
-
Save xseman/0ab7fed260f814b0e58cf1c4c9b0e5bb to your computer and use it in GitHub Desktop.
TypeScript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { readLines } from 'https://deno.land/std/io/bufio.ts'; | |
async function readData(filename: string): Promise<string[][]> { | |
const file = await Deno.open(filename); | |
const array: string[][] = []; | |
for await (const line of readLines(file)) { | |
!!line && array.push(line.split(' ')); | |
} | |
file.close(); | |
return array; | |
} | |
const [filename] = Deno.args; | |
if (!filename) { | |
console.log('File not specified'); | |
Deno.exit(1); | |
} | |
const data = await readData(filename); | |
// file.txt | |
// foo | |
// bar | |
// execute | |
// deno run --allow-read main.ts file.txt | |
// data = [ | |
// ['foo'], | |
// ['bar'] | |
// ] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Find a point in a polyline which is closest to a latlng | |
import { google } from 'google-maps'; | |
function findPoint( | |
point: google.maps.LatLng, | |
polyline: google.maps.Polyline | |
): { latlng: google.maps.LatLng; index: number } { | |
const dist = google.maps.geometry.spherical.computeDistanceBetween; | |
const distances = polyline | |
.getPath() | |
.getArray() | |
// [latlng, index of plyline, distance from point to polyline point] | |
.map<[google.maps.LatLng, number, number]>((polyline, index) => [ | |
polyline, | |
index, | |
dist(point, polyline), | |
]); | |
const [latlng, index] = distances.sort((a, b) => a[2] - b[2])[0]; | |
return { latlng, index }; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function fizzBuzz(len: number): void { | |
const arr = [...Array(len)].map((_, i) => i + 1); | |
for (let i = 0; i < arr.length; i++) { | |
if (arr[i] % 3 === 0 && arr[i] % 5 === 0 ) { | |
console.log('FizzBuzz'); | |
continue; | |
} | |
if (arr[i] % 3 === 0) { | |
console.log('Fizz'); | |
continue; | |
} | |
if (arr[i] % 5 === 0) { | |
console.log('Buzz'); | |
continue; | |
} | |
console.log(arr[i]); | |
} | |
} | |
const len = 100; | |
fizzBuzz(len); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Grouping objects by a property | |
// Inspired by | |
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Grouping_objects_by_a_property#Grouping_objects_by_a_property | |
const array = [ | |
{ name: 'Alice', age: 21 }, | |
{ name: 'Max', age: 20 }, | |
{ name: 'Jane', age: 20 }, | |
]; | |
type AElement = typeof array[0]; | |
function groupBy(objectArray: AElement[], property: keyof AElement) { | |
return objectArray.reduce((acc, curr) => { | |
const key = curr[property]; | |
if (!acc[key]) { | |
acc[key] = new Array<AElement>(); | |
} | |
acc[key].push(curr); | |
return acc; | |
}, {} as { [key: string]: AElement[] }); | |
} | |
const groupedPeople = groupBy(array, 'age'); | |
console.log(groupedPeople); | |
// groupedPeople is: | |
// { | |
// 20: [ | |
// { name: 'Max', age: 20 }, | |
// { name: 'Jane', age: 20 } | |
// ], | |
// 21: [{ name: 'Alice', age: 21 }] | |
// } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
enum Foo { | |
foo = 'bar', | |
bar = 'foo' | |
} | |
(Object.keys(Foo) as (keyof typeof Foo)[]).forEach(key => { | |
// autocomplete now works on "key" | |
}); | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const text = 'searched text' | |
function recursive(object: any): boolean { | |
return Object.keys(object).some(key => { | |
if (typeof object[key] === 'string') { | |
return (object[key] as string).toLowerCase().includes(text.toLowerCase()); | |
} | |
if (typeof object[key] === 'number') { | |
return (object[key] as number).toString().includes(text); | |
} | |
if (object[key] instanceof Array && typeof object[key][0] === 'string') { | |
return (object[key] as string[]).some(o => o.toLowerCase().includes(text.toLowerCase())); | |
} | |
if (object[key] instanceof Object) { | |
return recursive(object[key]); | |
} | |
return false; | |
}); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const defaultDiacriticsRemovalMap = [ | |
{'base':'A', 'letters':'\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F'}, | |
{'base':'a', 'letters':'\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250'}, | |
{'base':'AA','letters':'\uA732'}, | |
{'base':'aa','letters':'\uA733'}, | |
{'base':'AE','letters':'\u00C6\u01FC\u01E2'}, | |
{'base':'ae','letters':'\u00E6\u01FD\u01E3'}, | |
{'base':'AO','letters':'\uA734'}, | |
{'base':'ao','letters':'\uA735'}, | |
{'base':'AU','letters':'\uA736'}, | |
{'base':'au','letters':'\uA737'}, | |
{'base':'AV','letters':'\uA738\uA73A'}, | |
{'base':'av','letters':'\uA739\uA73B'}, | |
{'base':'AY','letters':'\uA73C'}, | |
{'base':'ay','letters':'\uA73D'}, | |
{'base':'B', 'letters':'\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181'}, | |
{'base':'b', 'letters':'\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253'}, | |
{'base':'C', 'letters':'\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E'}, | |
{'base':'c', 'letters':'\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184'}, | |
{'base':'D', 'letters':'\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779\u00D0'}, | |
{'base':'d', 'letters':'\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A'}, | |
{'base':'DZ','letters':'\u01F1\u01C4'}, | |
{'base':'Dz','letters':'\u01F2\u01C5'}, | |
{'base':'dz','letters':'\u01F3\u01C6'}, | |
{'base':'E', 'letters':'\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E'}, | |
{'base':'e', 'letters':'\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD'}, | |
{'base':'F', 'letters':'\u0046\u24BB\uFF26\u1E1E\u0191\uA77B'}, | |
{'base':'f', 'letters':'\u0066\u24D5\uFF46\u1E1F\u0192\uA77C'}, | |
{'base':'G', 'letters':'\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E'}, | |
{'base':'g', 'letters':'\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F'}, | |
{'base':'H', 'letters':'\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D'}, | |
{'base':'h', 'letters':'\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265'}, | |
{'base':'hv','letters':'\u0195'}, | |
{'base':'I', 'letters':'\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197'}, | |
{'base':'i', 'letters':'\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131'}, | |
{'base':'J', 'letters':'\u004A\u24BF\uFF2A\u0134\u0248'}, | |
{'base':'j', 'letters':'\u006A\u24D9\uFF4A\u0135\u01F0\u0249'}, | |
{'base':'K', 'letters':'\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2'}, | |
{'base':'k', 'letters':'\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3'}, | |
{'base':'L', 'letters':'\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780'}, | |
{'base':'l', 'letters':'\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747'}, | |
{'base':'LJ','letters':'\u01C7'}, | |
{'base':'Lj','letters':'\u01C8'}, | |
{'base':'lj','letters':'\u01C9'}, | |
{'base':'M', 'letters':'\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C'}, | |
{'base':'m', 'letters':'\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F'}, | |
{'base':'N', 'letters':'\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4'}, | |
{'base':'n', 'letters':'\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5'}, | |
{'base':'NJ','letters':'\u01CA'}, | |
{'base':'Nj','letters':'\u01CB'}, | |
{'base':'nj','letters':'\u01CC'}, | |
{'base':'O', 'letters':'\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C'}, | |
{'base':'o', 'letters':'\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275'}, | |
{'base':'OE','letters':'\u008C\u0152'}, | |
{'base':'oe','letters':'\u009C\u0153'}, | |
{'base':'OI','letters':'\u01A2'}, | |
{'base':'oi','letters':'\u01A3'}, | |
{'base':'OO','letters':'\uA74E'}, | |
{'base':'oo','letters':'\uA74F'}, | |
{'base':'OU','letters':'\u0222'}, | |
{'base':'ou','letters':'\u0223'}, | |
{'base':'P', 'letters':'\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754'}, | |
{'base':'p','letters':'\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755'}, | |
{'base':'Q', 'letters':'\u0051\u24C6\uFF31\uA756\uA758\u024A'}, | |
{'base':'q','letters':'\u0071\u24E0\uFF51\u024B\uA757\uA759'}, | |
{'base':'R', 'letters':'\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782'}, | |
{'base':'r','letters':'\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783'}, | |
{'base':'S', 'letters':'\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784'}, | |
{'base':'s','letters':'\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B'}, | |
{'base':'T', 'letters':'\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786'}, | |
{'base':'t','letters':'\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787'}, | |
{'base':'TZ','letters':'\uA728'}, | |
{'base':'tz','letters':'\uA729'}, | |
{'base':'U', 'letters':'\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244'}, | |
{'base':'u','letters': '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289'}, | |
{'base':'V', 'letters':'\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245'}, | |
{'base':'v','letters':'\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C'}, | |
{'base':'VY','letters':'\uA760'}, | |
{'base':'vy','letters':'\uA761'}, | |
{'base':'W', 'letters':'\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72'}, | |
{'base':'w','letters':'\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73'}, | |
{'base':'X', 'letters':'\u0058\u24CD\uFF38\u1E8A\u1E8C'}, | |
{'base':'x','letters':'\u0078\u24E7\uFF58\u1E8B\u1E8D'}, | |
{'base':'Y', 'letters':'\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE'}, | |
{'base':'y','letters':'\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF'}, | |
{'base':'Z', 'letters':'\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762'}, | |
{'base':'z','letters':'\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763'} | |
]; | |
let diacriticsMap = {}; | |
for (let i = 0; i < defaultDiacriticsRemovalMap.length; i++) { | |
let letters = defaultDiacriticsRemovalMap[i].letters; | |
for (let j = 0; j < letters.length; j++) { | |
diacriticsMap[letters[j]] = defaultDiacriticsRemovalMap[i].base; | |
} | |
} | |
function removeDiacritics(str) { | |
return str.replace(/[^\u0000-\u007E]/g, a => diacriticsMap[a] || a); | |
} | |
// TEST | |
// const paragraph = | |
// "L'avantage d'utiliser le lorem ipsum est bien évidemment de pouvoir créer des maquettes ou de remplir un site internet de contenus qui présentent un rendu s'approchant un maximum du rendu final. \n Par défaut lorem ipsum ne contient pas d'accent ni de caractères spéciaux contrairement à la langue française qui en contient beaucoup. C'est sur ce critère que nous proposons une solution avec cet outil qui générant du faux-texte lorem ipsum mais avec en plus, des caractères spéciaux tel que les accents ou certains symboles utiles pour la langue française. \n L'utilisation du lorem standard est facile d’utilisation mais lorsque le futur client utilisera votre logiciel il se peut que certains caractères spéciaux ou qu'un accent ne soient pas codés correctement. \n Cette page a pour but donc de pouvoir perdre le moins de temps possible et donc de tester directement si tous les encodages de base de donnée ou des sites sont les bons de plus il permet de récuperer un code css avec le texte formaté !"; | |
// alert(removeDiacritics(paragraph)); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// requirement ormconfig.json | |
// https://typeorm.io/#/using-ormconfig | |
import { createConnection } from "typeorm"; | |
function initDB() { | |
createConnection() | |
.then(() => { | |
console.log("DB connected"); | |
}) | |
.catch(e => { | |
console.log("DB cannot connect", e); | |
setTimeout(initDB, 5_000); | |
}); | |
} | |
initDB(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment