I hereby claim:
- I am castarco on github.
- I am castarco (https://keybase.io/castarco) on keybase.
- I have a public key whose fingerprint is 9D10 B5B4 1B15 934F C867 8397 40BB CA62 EF4B 86CC
To claim this, I am signing this object:
| [init] | |
| defaultBranch = main | |
| [commit] | |
| gpgsign = true | |
| template = ${HOME}/.gitmessage | |
| [push] | |
| gpgSign = if-asked | |
| [log] | |
| showSignature = true |
| // This first file contains the first iteration of this pattern. It's already | |
| // nice, but not enough for full-fledged IoC libraries. | |
| // There's a second file in this same gist that goes one step further, although, | |
| // for now, it still needs some extra polish. | |
| // ----------------------------------------------------------------------------- | |
| // First: the two main interfaces. | |
| // They are the core of the pattern. | |
| // ----------------------------------------------------------------------------- | |
| export interface WritableRegistry { |
| // We use symbols to eliminate any chance for problems with serialization | |
| const __BaseType: unique symbol = new Symbol('__BaseType') | |
| const __Brand: unique symbol = new Symbol('__Brand') | |
| // We mark the "brand/flavor" fields as readonly to avoid anyone doing weird stuff with them | |
| // We add a "__BaseType" field to make possible "complex" type manipulations | |
| // We accept "symbol" tags as a mechanism to avoid "types forgery" to bypass the type checker, | |
| // although I foresee that most of the times it won't be used. | |
| export type Branded<BaseType, Tag extends string | symbol> = BaseType & { | |
| readonly [__BaseType]: BaseType |
| export type ChainNominal<BaseType, Tag extends string> = BaseType extends { | |
| __type: infer Tag0 | |
| __baseType: infer BaseType0 | |
| } | |
| ? Tag0 extends [...infer NestedTags] | |
| ? BaseType0 & { __type: [Tag, ...NestedTags]; __baseType: BaseType0 } | |
| : never | |
| : BaseType & { | |
| __type: [Tag] // Using an array allow us to use multiple type tags :3 | |
| __baseType: BaseType // Only here to ease type inference |
I hereby claim:
To claim this, I am signing this object:
| /** | |
| * This approach has many limitations: | |
| * - it does not accept variable names with numbers or other symbols (relatively easy to fix) | |
| * - it does not accept arbitrary expressions (quite difficult to fix) | |
| */ | |
| function deferredTemplateLiteral(template: string, env: { [key: string]: string | undefined }): string { | |
| const varsMatcher = /\${([a-zA-Z_]+)}/ | |
| const globalVarsmatcher = /\${[a-zA-Z_]+}/g | |
| const varMatches: string[] = template.match(globalVarsmatcher) ?? [] |
| <?php | |
| /** | |
| * The MIT License (MIT) | |
| * | |
| * Copyright (c) 2015 Andrés Correa Casablanca <castarco@litipk.com> | |
| * | |
| * Permission is hereby granted, free of charge, to any person obtaining a copy of | |
| * this software and associated documentation files (the "Software"), to deal in | |
| * the Software without restriction, including without limitation the rights to |
| <?php | |
| declare(strict_types=1); | |
| function array_zip(array ...$arrays): array | |
| { | |
| // Applied suggestion from reddit | |
| // https://www.reddit.com/r/PHP/comments/76czco/php_equivalent_of_pythons_zip_function/doe5j86/ | |
| return \array_map(null, ...$arrays); | |
| } |
| <?php | |
| declare(strict_types=1); | |
| /** | |
| * Requires the DS extension (see https://github.com/php-ds/extension). | |
| * This script is a benchmark for simple RW operations on Ds\Vector (without affecting its length) | |
| */ | |
| /** | |
| * RESULTS (the times are not divided by the number of iterations, only numbers in the same row can be compared): |