Skip to content

Instantly share code, notes, and snippets.

View orion55's full-sized avatar

Orion55 orion55

  • 03:41 (UTC +05:00)
View GitHub Profile
@orion55
orion55 / yaml.nanorc
Created August 26, 2025 06:42
yaml.nanorc
# Supports `YAML` files
syntax "YAML" "\.ya?ml$"
header "^(---|===)" "%YAML"
## Keys
color magenta "^\s*[\$A-Za-z0-9_-]+\:"
color brightmagenta "^\s*@[\$A-Za-z0-9_-]+\:"
## Values
color white ":\s.+$"
@orion55
orion55 / isEqual.js
Created August 6, 2025 04:07
isEqual
export const isEqual = (a, b) => {
if (typeof a !== "object" && typeof b !== "object") {
return Object.is(a, b);
}
// Хотя null — примитивный тип в JavaScript, из-за некоторых
// исторических особенностей тип null — object, поэтому нам требуется
// дополнительная обработка для null.
if (a === null && b === null) {
return true;
}
@orion55
orion55 / isEmpty.js
Created August 6, 2025 04:06
isEmpty
export const isEmpty = (value) => {
return (
value === undefined ||
value === null ||
(typeof value === "object" && Object.keys(value).length === 0) ||
(typeof value === "string" && value.trim().length === 0)
// уберите trim, если строка из одних пробелов для вас не пустая
);
};
@orion55
orion55 / .bashrc
Last active June 30, 2025 06:48
ll bash
alias ll='ls -alFh --color=auto --group-directories-first'
@orion55
orion55 / tmux.sh
Created June 23, 2025 05:49
Создание сессии tmux с 3 окнами
#!/usr/local/bin/bash
SESSION_NAME="aster_env"
# Проверяем и завершаем существующую сессию если есть
if tmux has-session -t "$SESSION_NAME" >/dev/null 2>&1; then
echo "Обнаружена существующая сессия '$SESSION_NAME' - завершаем..."
tmux kill-session -t "$SESSION_NAME"
fi
@orion55
orion55 / openvpn.sh
Created May 2, 2025 12:18
2 OpenVPN tunnels
1. cd /usr/local/etc/rc.d
ln -s openvpn openvpn_voip
2. /etc/rc.conf
openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/openvpn.conf"
openvpn_voip_enable="YES"
openvpn_voip_configfile="/usr/local/etc/openvpn/gw.conf"
3.service openvpn restart
@orion55
orion55 / formatCurrency.ts
Created December 13, 2024 12:55
formatCurrency
const LOCALE_MAP: Record<string, string> = {
RUB: 'ru-RU',
USD: 'en-US',
EUR: 'de-DE',
};
export function formatCurrency(amount: number, currencyCode: string): string {
const locale = LOCALE_MAP[currencyCode] || 'ru-RU';
const formattedAmount = new Intl.NumberFormat(locale, {
@orion55
orion55 / date.ts
Created April 22, 2024 06:54
Преобразование даты в нужной тайм-зоне в зону UTC и формат ISO
export const convertToISO = (date: string, time: string, zone: string): string => {
const [day, month, year] = date.split('.').map(Number);
const [hour, minute] = time.split(':').map(Number);
const dateTime = DateTime.fromObject({ year, month, day, hour, minute }, { zone });
const utcDateTime = dateTime.toUTC();
return utcDateTime.toISO();
};
@orion55
orion55 / index.ts
Created August 28, 2023 05:46
ObjectManipulator
type ObjectWithNewProp<T, K extends string, V> = T & {[NK in K]: V};
export class ObjectManipulator<T> {
constructor(protected obj: T) {}
public set<K extends string, V>(key: K, value: V): ObjectManipulator<ObjectWithNewProp<T, K, V>> {
return new ObjectManipulator({...this.obj, [key]: value} as ObjectWithNewProp<T, K, V>);
}
public get<K extends keyof T>(key: K): T[K] {
@orion55
orion55 / index.d.ts
Created August 28, 2023 05:30
toFunctional
function toFunctional<T extends Function>(func: T): Function {
const fullArgCount = func.length;
function createSubFunction(curriedArgs: unknown[]) {
return function(this: unknown) {
const newCurriedArguments = curriedArgs.concat(Array.from(arguments));
if (newCurriedArguments.length > fullArgCount) {
throw new Error('Too many arguments');
}
if (newCurriedArguments.length === fullArgCount) {
return func.apply(this, newCurriedArguments);