O hirunewani blog

Frontend Weekly 2024-10-18

Created at

New ECMAScript Stage 4 Proposals、CSS nesting improves with CSSNestedDeclarations、.ioドメイン消滅の可能性について

New ECMAScript Stage 4 Proposals

2024年10月12日のTC39ミーティングで、Promise.tryImport AttributesRegExp ModifiersSync Iterator helpersJSON ModulesがStage 4になった。

https://ecmascript-daily.github.io/ecmascript/2024/10/12/ecmascript-proposal-update

Sync Iterator helpers

これによりイテレータを操作するためのヘルパー関数が多く追加される。

https://github.com/tc39/proposal-iterator-helpers

次のようにArray相当の記述が可能になる。

IteratorsArray
map(fn)map(fn)
filter(fn)filter(fn)
take(n)slice(0, n)
drop(n)slice(n)
flatMap(fn)flatMap(fn)
reduce(fn, init)reduce(fn, init)
toArray()
forEach(fn)forEach(fn)
some(fn)some(fn)
every(fn)every(fn)
find(fn)find(fn)
from(iter)

Promise.try

Promise.tryは、渡された関数を実行し、その結果をPromiseでラップして返す。

Primise.try(func());

Promise.tryを利用することで任意の関数をPromiseのセマンティクスで扱うことができる。 以下のコードに似た動作をする。

new Promise((resolve, reject) => {
  try {
    resolve(func());
  } catch (error) {
    reject(error);
  }
});

Import Attributes及びJSON Modules

Import AttributesはJSONやCSS、WASMなど追加のモジュールを読み込めるようにすることを目的にしている。

import json from "./foo.json" with { type: "json" };

合わせて、JSONモジュールのプロポーザルもStage 4になった。

https://github.com/tc39/proposal-json-modules

既にJSONの読み込みについては、Firefoxを除くモダンブラウザだけでなくNode.jsやDeno、Bunなどでも利用可能。

RegExp Modifiers

RegExp Modifiersを利用すると、次のように正規表現のフラグを一部変更することが出来る。

const re1 = /^[a-z](?-i:[a-z])$/i;
re1.test("ab"); // true
re1.test("Ab"); // true
re1.test("aB"); // false

const re2 = /^(?i:[a-z])[a-z]$/;
re2.test("ab"); // true
re2.test("Ab"); // true
re2.test("aB"); // false

https://github.com/tc39/proposal-regexp-modifiers

CSS nesting improves with CSSNestedDeclarations

CSS Nestingにおける問題を解決するために、Chrome 130から導入されるCSSNestedDeclarationsについて解説する記事。

https://web.dev/blog/css-nesting-cssnesteddeclarations?hl=en

Chrome 130から宣言のホイスティングが行われなくなるため、宣言がネストしたルールセットの下にあるような記述をしていた場合、壊れる可能性がある。

/* This does not work in Chrome 130 */
#mypopover:popover-open {
  @starting-style {
    opacity: 0;
    scale: 0.5;
  }

  opacity: 1;
  scale: 1;
}

.ioドメイン消滅の可能性について

イギリスの領土返還により、.ioドメインが消滅するかもしれないという話が出ている。 記事では、ユーゴスラビアに割り当てられていた国別コードトップレベルドメイン(ccTLD)である.yuや、 ソビエト連邦のccTLDであった.suを例に挙げ、.ioドメインが消滅する可能性について考察している。

https://every.to/p/the-disappearance-of-an-internet-domain