https://github.com/ChromeDevTools/chrome-devtools-mcp#connecting-to-a-running-chrome-instance
claude mcp add chrome-devtools --scope user -- npx chrome-devtools-mcp@latest --autoConnectPuis: chrome://inspect/#remote-debugging
https://github.com/ChromeDevTools/chrome-devtools-mcp#connecting-to-a-running-chrome-instance
claude mcp add chrome-devtools --scope user -- npx chrome-devtools-mcp@latest --autoConnectPuis: chrome://inspect/#remote-debugging
| # https://www.freedesktop.org/software/systemd/man/systemd.unit.html | |
| [Unit] | |
| Description=My App | |
| After=network.target | |
| # https://www.freedesktop.org/software/systemd/man/systemd.exec.html | |
| [Service] | |
| Type=simple | |
| # https://www.freedesktop.org/software/systemd/man/systemd.exec.html#WorkingDirectory= | |
| WorkingDirectory=-/srv/app/ |
| import * as path from 'path' | |
| import ts from 'typescript' | |
| function build( | |
| override: { | |
| compilerOptions?: ts.CompilerOptions | |
| include?: string[] | |
| exclude?: string[] | |
| files?: string[] | |
| extends?: string |
| // Make sure you have json-summary as a coverage reporter in your jest config. | |
| // coverageReporters: ['json-summary', 'text', 'lcov'] | |
| import { readFileSync, mkdirSync, writeFileSync } from 'fs' | |
| import { join } from 'path' | |
| import { get } from 'https' | |
| import { ok } from 'assert' | |
| Promise.resolve().then(async () => { | |
| const outputDir = join(process.cwd(), 'badges') |
| // https://www.typescriptlang.org/docs/handbook/advanced-types.html | |
| // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html | |
| /** | |
| * Enlève les clés K de T (plus précis que le Omit natif). | |
| */ | |
| type OmitStrict<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>> | |
| /** | |
| * Récupère la version promisifiée d'une fonction. |
| // Generate class helpers for size properties such as margin, padding, font-size | |
| // Usage : | |
| // @include marginer(5, 60, 5) | |
| // .mt5 will then add margin-top:5px to the element, | |
| // and so on for each side, from 5px to 60px with a 5px step. | |
| @mixin marginer($min, $max, $step) { | |
| .mt#{$min} {margin-top: $min*1px} | |
| .mb#{$min} {margin-bottom: $min*1px} | |
| .ml#{$min} {margin-left: $min*1px} |
| /** | |
| * Gives a class constructor the possibility to be invoked | |
| * with or without the `new` keyword, like built-in constructors. | |
| * | |
| * @param class_ class whose constructor will be proxified. | |
| * @param constructorName if we need an accurate `constructor.name` property. | |
| */ | |
| export function makeNewOptional<C extends new (...args: any[]) => any>(class_: C, constructorName?: string) { | |
| type NoNew<T extends C> = (...args: ConstructorParameters<T>) => InstanceType<T> |
| { | |
| "$id": "https://lerna.js.org/", | |
| "type": "object", | |
| "properties": { | |
| "version": { | |
| "$id": "/properties/version", | |
| "type": "string", | |
| "description": "The current version of the repository.", | |
| "examples": [ | |
| "1.1.3" |
| /** | |
| * Defines a getter on a specified object that will be created upon first use. | |
| * | |
| * https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/XPCOMUtils.jsm#defineLazyGetter() | |
| * https://dxr.mozilla.org/mozilla-central/source/js/xpconnect/loader/XPCOMUtils.jsm#120 | |
| */ | |
| function defineMemoizedGetter(object: any, prop: string, fn: Function) { | |
| let redefining = false | |
| Object.defineProperty(object, prop, { |