Open6
使ったことがあるTips
文字列をspilitした際にdelimiterを削除せずに含めて返す
"/{a}/b/{a}/c{a}/".split(new RegExp("({a})"))
// => ["/", "{a}", "/b/", "{a}", "/c", "{a}", "/"]
Docker + Nginx + SSL
オレオレ証明を使ったnginxのreverse proxyを作る
#!/bin/bash
BASE_DIR=ssl
mkdir -p $BASE_DIR
openssl genrsa -out "$BASE_DIR/server.key" 2048
openssl req -new -key "$BASE_DIR/server.key" -subj "/C=JP/ST=Some-State/O=Some-Org/CN=my.localhost.com" > server.csr -out "$BASE_DIR/server.csr"
openssl x509 -req -days 3650 -extfile subjectnames.txt -signkey "$BASE_DIR/server.key" < "$BASE_DIR/server.csr" > "$BASE_DIR/server.crt"
server {
listen 443 ssl;
server_name my.localhost.com;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_protocols TLSv1.2 SSLv3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
# https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds
proxy_pass http://host.docker.internal:3000;
proxy_redirect off;
}
}
FROM nginx:1.19.7
RUN mkdir -p /etc/nginx/ssl
COPY ./ssl /etc/nginx/ssl
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
services:
reverse-proxy:
build: .
restart: always
ports:
# - "80:80"
- "443:443"
volumes:
- ./ssl:/etc/nginx/ssl
- ./nginx.conf:/etc/nginx/conf.d/default.conf
subjectAltName = DNS:my.localhost.com, IP:127.0.0.1
TypeScriptでReturnTypeを書き換える
type ReplaceReturnType<T extends (...params: any) => any, NewReturnType> = (...params: Parameters<T>) => NewReturnType;
// 発展させて、ReturnTypeをPromiseでWrapするshort hand
type WrapPromiseReturnType<T extends (...params: any) => any> = ReplaceReturnType<T, Promise<ReturnType<T>>>;
参考
WindowsとUNIXの両方のOSでNode.jsを利用した時、改行コードをsplitする方法
Good
"a\nb\r\nc".split(/\r?\n/)
Bad
const { EOL } = require("os");
"a\nb\r\nc".split(EOL)
参考
lerna publish --canaryの注意点
- package単位でコミットハッシュが変更されていなければ、そのパッケージはpublishされない
- 下位のパッケージが変更ある場合は更新される
- package.jsonに記述されるバージョンは、
1.0.1-next.1+1234567
の形式だが、実際にtar.gzのURLは+
とコミットハッシュ1234567
を除いた1.0.1-next.1
でリリースされる。
デフォルトオプションだとキャレットがつく
-
"1.0.1-alpha.1+12345"
でpublishしたつもりが、"^1.0.1-alpha.1+12345"
となってしまう。 -
--exact
オプションを付ける必要がある。lerna/publishのREADMEの方には書いてないけど。
Objectのkeyをアルファベット順にソートする
export const compareBasename = (a: string, b: string): 0 | -1 | 1 => {
if (a.toLowerCase() < b.toLowerCase()) {
return -1;
}
if (a.toLowerCase() > b.toLowerCase()) {
return 1;
}
return 0;
};
export const sortObjectKey = (obj: Record<string, any>): Record<string, any> => {
const sortedKeys = Object.keys(obj).sort(compareBasename);
return sortedKeys.reduce((newObject, currentKey) => {
return { ...newObject, [currentKey]: obj[currentKey] };
}, {});
};
sortObjectKey({ "c": "3", "b": "2", "a": "1" })
// => { "a": "1", "b": "2", "c": "3" }