Skip to content

Instantly share code, notes, and snippets.

View waptik's full-sized avatar
💻
Learning JavaScript and ReactJS...

Stephane Mensah waptik

💻
Learning JavaScript and ReactJS...
View GitHub Profile
@waptik
waptik / paginate.ts
Created July 29, 2021 08:37
Mongoose paginate typescript
/** @see https://discord.com/channels/612400042900193311/612406252164612129/869681421567000608 **/
export async function queryPaginate<T>(
model: ModelType<T>,
pageNum = 1,
filter: MongooseFilterQuery<DocumentType<T>>,
populate?: string[],
): Promise<IPaginatedData<T[]>> {
const [docs, total] = await Promise.all([
model
.find(filter)
@waptik
waptik / theme.ts
Created July 12, 2021 17:10
Styling the inner div of tiptap v2 with chakra-ui
import { extendTheme } from "@chakra-ui/react";
import { mode } from "@chakra-ui/theme-tools";
// Currently a bug with theme.config typings for initialColorMode. Workaround.
interface ThemeConfig {
useSystemColorMode?: boolean;
initialColorMode: "light" | "dark";
}
@waptik
waptik / index.ts
Created July 12, 2021 16:48
A custom extension for tiptap v2 to for image upload
import { Node, nodeInputRule } from "@tiptap/core";
import { mergeAttributes } from "@tiptap/react";
import { uploadImagePlugin, UploadFn } from "./upload_image";
/**
* Tiptap Extension to upload images
* @see https://gist.github.com/slava-vishnyakov/16076dff1a77ddaca93c4bccd4ec4521#gistcomment-3744392
* @since 7th July 2021
*
HOW TO UNBLOCK ANIMEPAHE (JUST IN CASE) AND OTHER BLOCKED SITES
## Introduction
Whenever you open a website, your device will send DNS request, most internet connection uses ISP's DNS servers by default, so basically your ISP and possibly government could know what sites you access.
This is basically how site blocking works.
Many ISPs have a blocklist on their DNS servers, if your device sends DNS request of a domain that is in their blocklist, they will block it.
Fortunately there are many ways to bypass it, one of them is by changing DNS on our devices, but if you are using a traditional way like by using 8.8.8.8 and 8.8.4.4, ISP could still sniff and intercept the DNS request because it's un-encrypted.
@waptik
waptik / test_array_of_objects.js
Last active May 8, 2021 04:17
[SOLVED] - I need help to: 1: rename keys to lowercase values 2: remove empty objects with one non-null key
// current code
const arrs = [
{
comments: 'asd',
movement: 'Back Squat',
userID: 'wDHZv3OL55SIymHkhMUejNleNkx1',
weight: '330',
},
{
@waptik
waptik / trackImages.ts
Last active April 18, 2021 12:04
How to get and save photo by group media in telegrafjs
import { Composer, MiddlewareFn } from "telegraf"
import { logAction } from "app/core/helpers/logAction"
import { BotContext } from "types"
import { report } from "../helpers"
import { withoutKeys } from "app/core/helpers/misc"
import { Message } from "typegram"
// @see https://github.com/TGxTG/TOUGAO/blob/master/src/model/Message.js#L86
@waptik
waptik / regex id.ts
Last active April 2, 2021 23:48
regex to filter bot command and args
// ref https://flaviocopes.com/javascript-regular-expressions
const re=/(?<code>(c|g)_\w+)(.)(?<to>to)(.)(?<id>id\d+)/
console.log(re.exec("c_84www to id890890")) // returns ["c_84www to id890890", "c_84www", "c", " ", "to", " ", "id890890", index: 0, input: "c_84www to id890890", groups: {code: "c_84www", to: "to", id: "id890890"}]
@waptik
waptik / example.ts
Created April 2, 2021 12:23
implementation of telegraf-session using Prisma as datastore based on https://github.com/alexnzarov/telegraf-session-mongodb
import { Context, Telegraf } from 'telegraf'
import { PrismaClient } from '@prisma/client'
import { session } from 'utils/telegraf-session-prisma' // path to session module
const prisma = new PrismaClient()
interface SessionData {
messageCount: number
// ... more session data go here
@waptik
waptik / toSlug.ts
Created March 29, 2021 11:51
Generate slugs following dev.to's pattern
import { parameterize } from "inflected"
import { nanoid } from "nanoid"
export function toSlug(slug: string) {
slug = parameterize(slug)
const nano = nanoid(4)
// https://stackoverflow.com/a/16577007/3342703
const id = nano.toLowerCase().replace(/[-_]/g, "")
return `${slug.replace("_", "")}-${id}`
}
@waptik
waptik / paginate.ts
Last active March 27, 2021 07:47
A simple pagination helper function for prisma 2
/**
* This is custom pagination helper that
* works with prisma 2
* @author @_waptik
*/
import db from "db" // xutom prisma wrapper by blitz-js
interface Paginate {
name: string