Skip to content

Instantly share code, notes, and snippets.

View dmitry-stepanenko's full-sized avatar

Dmitriy Stepanenko dmitry-stepanenko

View GitHub Profile
import { Chat } from '@hashbrownai/core';
import { ChatCompletionStream } from 'openai/lib/ChatCompletionStream';
type UIObject = {
ui: Array<Record<string, unknown>>;
};
export async function* processChunksAsync(
stream: ChatCompletionStream<null>,
): AsyncGenerator<Chat.Api.CompletionChunk, void, unknown> {
@dmitry-stepanenko
dmitry-stepanenko / .gitconfig
Last active May 29, 2025 10:01
git aliases
[alias]
pushfl = push --force-with-lease
l = log
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --branches
ch = checkout
cm = commit -m
acm = !git add . && git commit -m
rsft = reset --soft HEAD~1
rshd = reset --hard
rshd1 = reset --hard HEAD~1
import { execSync } from 'child_process';
import { output } from '@nx/devkit';
import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';
import {
ensureHeadAndBaseAreSet,
findClosestProjectByFilePath,
getFilesUsingBaseAndHead,
@dmitry-stepanenko
dmitry-stepanenko / .eslintrc-with-type-checker.json
Created July 14, 2024 08:21
separate eslint with type checked
{
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": ["tsconfig.*?.json"],
"warnOnUnsupportedTypeScriptVersion": false
},
"plugins": ["rxjs", "rxjs-angular"],
"overrides": [
{
"files": ["*.ts", "*.tsx"],
const control = new FormControl('Hello, world!');
control.reset();
console.log(control.value); // null
import { runValueAccessorTests } from 'ngx-cva-test-suite';
import { CounterControlComponent } from './counter.component';
runValueAccessorTests({
/** Component, that is being tested */
component: CounterControlComponent,
/**
* All the metadata required for this test to run.
* Under the hood calls TestBed.configureTestingModule with provided config.
*/
// ... code of CounterComponent
writeValue(value: number) {
// it's convenient to reuse existing "setValue" method, right?
// however, this will lead to the incorrect behavior
this.setValue(value, false);
this._cdr.markForCheck();
}
protected setValue(value: number, emitEvent: boolean) {
this.value = value;
interface ControlValueAccessor {
writeValue(obj: any): void
registerOnChange(fn: any): void
registerOnTouched(fn: any): void
setDisabledState(isDisabled: boolean)?: void
}
// ... code of CounterComponent
writeValue(value: number) {
// it's convenient to reuse existing "setValue" method, right?
// however, this will lead to the incorrect behavior
this.setValue(value);
this._cdr.markForCheck();
}
protected setValue(value: number) {
const parsed = parseInt(value as any);
export class AppComponent {
readonly animal = new FormControl(‘rabbit’);
constructor() {
ctrl.valueChanges.subscribe(console.log);
animal.setValue(‘hare’);
animal.setValue(‘cat’);
}
}