

# CloudFront Functions の JavaScript ランタイムの機能
<a name="functions-javascript-runtime-features"></a>

CloudFront Functions の JavaScript ランタイム環境は [ ECMAScript (ES) バージョン 5.1](https://www.ecma-international.org/ecma-262/5.1/) に準拠しており、ES バージョン 6～12 の一部の機能をサポートしています。

最新の機能を利用するには、JavaScript ランタイム 2.0 を使用することをお勧めします。

JavaScript ランタイム 2.0 の機能には、1.0 と比較して以下の変更があります。
+ バッファモジュールメソッドが利用可能です。
+ 以下の非標準の文字列プロトタイプメソッドは使用できません。
  + `String.prototype.bytesFrom()`
  + `String.prototype.fromBytes()`
  + `String.prototype.fromUTF8()`
  + `String.prototype.toBytes()`
  + `String.prototype.toUTF8()`
+ 暗号モジュールには次の変更があります。
  + `hash.digest()` - エンコーディングを指定しない場合、戻り型は `Buffer` に変更されます。
  + `hmac.digest()` - エンコーディングを指定しない場合、戻り型は `Buffer` に変更されます。
+ その他の新しい機能の詳細については、「[CloudFront Functions の JavaScript ランタイム 2.0 の機能](functions-javascript-runtime-20.md)」を参照してください。

**Topics**
+ [JavaScript ランタイム 1.0 の機能](functions-javascript-runtime-10.md)
+ [JavaScript ランタイム 2.0 の機能](functions-javascript-runtime-20.md)

# CloudFront Functions の JavaScript ランタイム 1.0 の機能
<a name="functions-javascript-runtime-10"></a>

CloudFront Functions の JavaScript ランタイム環境は [ ECMAScript (ES) バージョン 5.1](https://262.ecma-international.org/5.1/) に準拠しており、ES バージョン 6～9 の一部の機能をサポートしています。また、ES 仕様に含まれない非標準メソッドも提供しています。

次のトピックでは、サポートされるすべての言語機能の一覧を示します。

**Topics**
+ [

## 主要機能
](#writing-functions-javascript-features-core)
+ [

## プリミティブオブジェクト
](#writing-functions-javascript-features-primitive-objects)
+ [

## ビルトインオブジェクト
](#writing-functions-javascript-features-builtin-objects)
+ [

## エラーのタイプ
](#writing-functions-javascript-features-error-types)
+ [

## Globals
](#writing-functions-javascript-features-globals)
+ [

## ビルトインモジュール
](#writing-functions-javascript-features-builtin-modules)
+ [

## 制限された機能
](#writing-functions-javascript-features-restricted-features)

## 主要機能
<a name="writing-functions-javascript-features-core"></a>

ES の次の主要機能がサポートされています。

**Types]**  
すべての ES 5.1 タイプでサポートされています。これには、ブール値、数値、文字列、オブジェクト、配列、関数、関数コンストラクタ、正規表現が含まれます。

**演算子**  
すべての ES 5.1 演算子でサポートされています。  
ES 7 指数演算子 (`**`) がサポートされています。

**ステートメント**  
`const` および `let` ステートメントはサポートされていません。
次の ES 5.1 ステートメントがサポートされています。  
+ `break`
+ `catch`
+ `continue`
+ `do-while`
+ `else`
+ `finally`
+ `for`
+ `for-in`
+ `if`
+ `return`
+ `switch`
+ `throw`
+ `try`
+ `var`
+ `while`
+ ラベル付きステートメント

**リテラル**  
ES 6 テンプレートリテラル (複数行の文字列、式の補間、および入れ子テンプレート) がサポートされています。

**関数**  
すべての ES 5.1 機能がサポートされています。  
ES 6 のアロー関数、ES 6 のレストパラメータ (残余因数) 構文がサポートされています。

**Unicode**  
ソーステキストおよび文字列リテラルには、Unicode でエンコードされた文字を含めることができます。6 文字の Unicode エスケープシーケンス (コードポイント、例: `\uXXXX`) もサポートされています。

**Strict モード**  
関数は Strict モードで動作するため、関数コードに `use strict` ステートメントを追加する必要はありません。これは変更できません。

## プリミティブオブジェクト
<a name="writing-functions-javascript-features-primitive-objects"></a>

以下の ES プリミティブオブジェクトがサポートされています。

**オブジェクト**  
オブジェクトについて以下の ES 5.1 メソッドがサポートされています。  
+ `create` (プロパティリストなし)
+ `defineProperties`
+ `defineProperty`
+ `freeze`
+ `getOwnPropertyDescriptor`
+ `getOwnPropertyNames`
+ `getPrototypeOf`
+ `hasOwnProperty`
+ `isExtensible`
+ `isFrozen`
+ `prototype.isPrototypeOf`
+ `isSealed`
+ `keys`
+ `preventExtensions`
+ `prototype.propertyIsEnumerable`
+ `seal`
+ `prototype.toString`
+ `prototype.valueOf`
オブジェクトについて以下の ES 6 メソッドがサポートされています。  
+ `assign`
+ `is`
+ `prototype.setPrototypeOf`
オブジェクトについて以下の ES 8 メソッドがサポートされています。  
+ `entries`
+ `values`

**文字列**  
文字列について以下の ES 5.1 メソッドがサポートされています。  
+ `fromCharCode`
+ `prototype.charAt`
+ `prototype.concat`
+ `prototype.indexOf`
+ `prototype.lastIndexOf`
+ `prototype.match`
+ `prototype.replace`
+ `prototype.search`
+ `prototype.slice`
+ `prototype.split`
+ `prototype.substr`
+ `prototype.substring`
+ `prototype.toLowerCase`
+ `prototype.trim`
+ `prototype.toUpperCase`
文字列について以下の ES 6 メソッドがサポートされています。  
+ `fromCodePoint`
+ `prototype.codePointAt`
+ `prototype.endsWith`
+ `prototype.includes`
+ `prototype.repeat`
+ `prototype.startsWith`
文字列について以下の ES 8 メソッドがサポートされています。  
+ `prototype.padStart`
+ `prototype.padEnd`
文字列について以下の ES 9 メソッドがサポートされています。  
+ `prototype.trimStart`
+ `prototype.trimEnd`
文字列について以下の非標準メソッドがサポートされています。  
+ `prototype.bytesFrom(array | string, encoding)`

  オクテット列またはエンコードされた文字列からバイト文字列を作成します。文字列エンコーディングオプションは `hex`、`base64`、`base64url`です。
+ `prototype.fromBytes(start[, end])`

  バイト文字列から Unicode 文字列を作成します。各バイトは、対応する Unicode コードポイントで置き換えられます。
+ `prototype.fromUTF8(start[, end])`

  UTF-8 でエンコードされたバイト文字列から Unicode 文字列を作成します。エンコーディングが正しくない場合は、`null` が返されます。
+ `prototype.toBytes(start[, end])`

  Unicode 文字列からバイト文字列を作成します。すべての文字は [0,255] の範囲内にある必要があります。そうでない場合は、`null` が返されます。
+ `prototype.toUTF8(start[, end])`

  Unicode 文字列から UTF-8 でエンコードされたバイト文字列を作成します。

**数値**  
番号に関するすべての ES 5.1 メソッドがサポートされています。  
番号について以下の ES 6 メソッドがサポートされています。  
+ `isFinite`
+ `isInteger`
+ `isNaN`
+ `isSafeInteger`
+ `parseFloat`
+ `parseInt`
+ `prototype.toExponential`
+ `prototype.toFixed`
+ `prototype.toPrecision`
+ `EPSILON`
+ `MAX_SAFE_INTEGER`
+ `MAX_VALUE`
+ `MIN_SAFE_INTEGER`
+ `MIN_VALUE`
+ `NEGATIVE_INFINITY`
+ `NaN`
+ `POSITIVE_INFINITY`

## ビルトインオブジェクト
<a name="writing-functions-javascript-features-builtin-objects"></a>

ES の以下のビルトインオブジェクトがサポートされています。

**Math**  
ES 5.1 のすべての Math メソッドがサポートされています。  
CloudFront Functions runtime 環境では、`Math.random()` 実装に、関数が実行されたときのタイムスタンプがシードされた OpenBSD `arc4random` を使用します。
以下の ES 6 Math メソッドがサポートされています。  
+ `acosh`
+ `asinh`
+ `atanh`
+ `cbrt`
+ `clz32`
+ `cosh`
+ `expm1`
+ `fround`
+ `hypot`
+ `imul`
+ `log10`
+ `log1p`
+ `log2`
+ `sign`
+ `sinh`
+ `tanh`
+ `trunc`
+ `E`
+ `LN10`
+ `LN2`
+ `LOG10E`
+ `LOG2E`
+ `PI`
+ `SQRT1_2`
+ `SQRT2`

**日付**  
すべての ES 5.1 の `Date` 機能がサポートされています。  
セキュリティ上の理由から、`Date` は、単一の関数実行の有効期間中、常に同じ値 (関数の開始時間) を返します。詳細については、「[制限された機能](#writing-functions-javascript-features-restricted-features)」を参照してください。

**関数**  
`apply`、`bind`、`call` メソッドがサポートされています。  
関数コンストラクタはサポートされていません。

**正規表現**  
すべての ES 5.1 の正規表現機能がサポートされています。正規表現言語は Perl 互換です。ES 9 の名前付きキャプチャグループがサポートされています。

**JSON**  
`parse`、`stringify` を含むすべての ES 5.1 JSON 機能がサポートされています。

**配列**  
配列について以下の ES 5.1 メソッドがサポートされています。  
+ `isArray`
+ `prototype.concat`
+ `prototype.every`
+ `prototype.filter`
+ `prototype.forEach`
+ `prototype.indexOf`
+ `prototype.join`
+ `prototype.lastIndexOf`
+ `prototype.map`
+ `prototype.pop`
+ `prototype.push`
+ `prototype.reduce`
+ `prototype.reduceRight`
+ `prototype.reverse`
+ `prototype.shift`
+ `prototype.slice`
+ `prototype.some`
+ `prototype.sort`
+ `prototype.splice`
+ `prototype.unshift`
配列について以下の ES 6 メソッドがサポートされています。  
+ `of`
+ `prototype.copyWithin`
+ `prototype.fill`
+ `prototype.find`
+ `prototype.findIndex`
配列について以下の ES 7 メソッドがサポートされています。  
+ `prototype.includes`

**型付き配列**  
以下の ES 6 型付き配列がサポートされています。  
+ `Int8Array`
+ `Uint8Array`
+ `Uint8ClampedArray`
+ `Int16Array`
+ `Uint16Array`
+ `Int32Array`
+ `Uint32Array`
+ `Float32Array`
+ `Float64Array`
+ `prototype.copyWithin`
+ `prototype.fill`
+ `prototype.join`
+ `prototype.set`
+ `prototype.slice`
+ `prototype.subarray`
+ `prototype.toString`

**ArrayBuffer**  
`ArrayBuffer` について以下のメソッドがサポートされています。  
+ `prototype.isView`
+ `prototype.slice`

**promise**  
promise について以下のメソッドがサポートされています。  
+ `reject`
+ `resolve`
+ `prototype.catch`
+ `prototype.finally`
+ `prototype.then`

**Crypto**  
暗号モジュールは、標準のハッシュおよびハッシュベースのメッセージ認証コード (HMAC) ヘルパーを提供します。`require('crypto')` を使用してモジュールをロードできます。モジュールは、Node.js の相対物とまったく同じように動作する以下のメソッドを公開します。  
+ `createHash(algorithm)`
+ `hash.update(data)`
+ `hash.digest([encoding])`
+ `createHmac(algorithm, secret key)`
+ `hmac.update(data)`
+ `hmac.digest([encoding])`
詳細については、「ビルトインモジュールセクション」の「[Crypto (ハッシュと HMAC)](#writing-functions-javascript-features-builtin-modules-crypto)」を参照してください。

**コンソール**  
これはデバッグ用のヘルパーオブジェクトです。ログメッセージを記録するための `log()` メソッドのみサポートしています。  
CloudFront Functions は、`console.log('a', 'b')` などのカンマ構文をサポートしていません。代わりに、`console.log('a' + ' ' + 'b')` 形式を使用してください。

## エラーのタイプ
<a name="writing-functions-javascript-features-error-types"></a>

以下のエラーオブジェクトがサポートされています。
+ `Error`
+ `EvalError`
+ `InternalError`
+ `MemoryError`
+ `RangeError`
+ `ReferenceError`
+ `SyntaxError`
+ `TypeError`
+ `URIError`

## Globals
<a name="writing-functions-javascript-features-globals"></a>

`globalThis` オブジェクトはサポートされています。

以下の ES 5.1 グローバル関数がサポートされています。
+ `decodeURI`
+ `decodeURIComponent`
+ `encodeURI`
+ `encodeURIComponent`
+ `isFinite`
+ `isNaN`
+ `parseFloat`
+ `parseInt`

以下のグローバル定数がサポートされています。
+ `NaN`
+ `Infinity`
+ `undefined`

## ビルトインモジュール
<a name="writing-functions-javascript-features-builtin-modules"></a>

以下のビルトインモジュールがサポートされています。

**Topics**
+ [

### Crypto (ハッシュと HMAC)
](#writing-functions-javascript-features-builtin-modules-crypto)
+ [

### クエリ文字列
](#writing-functions-javascript-features-builtin-modules-query-string)

### Crypto (ハッシュと HMAC)
<a name="writing-functions-javascript-features-builtin-modules-crypto"></a>

暗号モジュール (`crypto`) は、標準のハッシュおよびハッシュベースのメッセージ認証コード (HMAC) ヘルパーを提供します。`require('crypto')` を使用してモジュールをロードできます。このモジュールは、Node.js の相対物とまったく同じように動作する以下のメソッドを提供します。

**ハッシュメソッド**

`crypto.createHash(algorithm)`  
ハッシュオブジェクトを作成して返します。このハッシュオブジェクトは、指定されたアルゴリズム (`md5`、`sha1`、`sha256` のいずれか) を使用してハッシュダイジェストの生成に使用できます。

`hash.update(data)`  
指定された `data` を使用してハッシュコンテンツを更新します。

`hash.digest([encoding])`  
`hash.update()` を使用して渡されたすべてのデータのダイジェストを計算します。エンコードは `hex`、`base64`、`base64url` のいずれかを使用します。

**HMAC メソッド**

`crypto.createHmac(algorithm, secret key)`  
指定された `algorithm` と `secret key` を使用する HMAC オブジェクトを作成して返します。アルゴリズムは `md5`、`sha1`、`sha256` のいずれかを使用します。

`hmac.update(data)`  
指定された `data` を使用して HMAC コンテンツを更新します 。

`hmac.digest([encoding])`  
`hmac.update()` を使用して渡されたすべてのデータのダイジェストを計算します。エンコードは `hex`、`base64`、`base64url` のいずれかを使用します。

### クエリ文字列
<a name="writing-functions-javascript-features-builtin-modules-query-string"></a>

**注記**  
[CloudFront Functions イベントオブジェクト](functions-event-structure.md)は、URL クエリ文字列を自動的に解析します。つまり、ほとんどの場合、このモジュールを使用する必要はありません。

クエリ文字列モジュール (`querystring`) は、URL クエリ文字列を解析および書式設定するためのメソッドを提供します。`require('querystring')` を使用してモジュールをロードできます。このモジュールは、以下のメソッドを提供します。

`querystring.escape(string)`  
URL は `string` をエンコードし、エスケープしたクエリ文字列を返します。このメソッドは `querystring.stringify()` で使用するため、直接使用しないでください。

`querystring.parse(string[, separator[, equal[, options]]])`  
クエリ文字列 (`string`) を解析し、オブジェクトを返します。  
`separator` パラメータは、クエリ文字列のキーと値のペアを区切る substring です。デフォルトでは、`&` です。  
`equal` パラメータは、クエリ文字列のキーと値を区切る substring です。デフォルトでは、`=` です。  
`options` パラメータは、以下のキーを持つオブジェクトです。    
`decodeURIComponent function`  
クエリ文字列のパーセントエンコーディングされた文字を decode する関数です。デフォルトでは、`querystring.unescape()` です。  
`maxKeys number`  
解析するキーの最大数。デフォルトでは、`1000` です。キーカウントの制限を解除するには、`0` の値を使用します。
デフォルトでは、クエリ文字列のパーセントエンコーディングされた文字は、UTF-8 エンコーディングを使用していると見なされます。無効な UTF-8 シーケンスは、`U+FFFD` 置換文字に置き換えられます。  
たとえば、次のクエリ文字列の場合:  

```
'name=value&abc=xyz&abc=123'
```
`querystring.parse()`の戻り値は次のとおりです。  

```
{
name: 'value',
abc: ['xyz', '123']
}
```
`querystring.decode()` は のエイリアスです。`querystring.parse()`

`querystring.stringify(object[, separator[, equal[, options]]])`  
`object` をシリアル化し、クエリ文字列を返します。  
`separator` パラメータは、クエリ文字列のキーと値のペアを区切る substring です。デフォルトでは、`&` です。  
`equal` パラメータは、クエリ文字列のキーと値を区切る substring です。デフォルトでは、`=` です。  
`options` パラメータは、以下のキーを持つオブジェクトです。    
`encodeURIComponent function`  
URL-unsafe 文字をクエリ文字列のパーセントエンコーディングに変換するために使用される関数です。デフォルトでは、`querystring.escape()` です。
デフォルトでは、クエリ文字列でパーセントエンコーディングが必要な文字は UTF-8 としてエンコードされます。別のエンコーディングを使用するには、`encodeURIComponent` オプションを指定します。  
以下のコードでの例:  

```
querystring.stringify({ name: 'value', abc: ['xyz', '123'], anotherName: '' });
```
戻り値:  

```
'name=value&abc=xyz&abc=123&anotherName='
```
`querystring.encode()` は のエイリアスです。`querystring.stringify()`

`querystring.unescape(string)`  
指定された `string` 内の URL パーセントエンコーディングされた文字をデコードし、エスケープしていないクエリ文字列を返します。このメソッドは `querystring.parse()`で使用するため、直接使用しないでください。

## 制限された機能
<a name="writing-functions-javascript-features-restricted-features"></a>

次の JavaScript 言語機能は、セキュリティ上の問題により、サポートされていないか、制限されています。

**動的コード評価**  
動的コード評価はサポートされていません。`eval()`、`Function` 両方のコンストラクタが試行された場合、エラーをスローします。たとえば、`const sum = new Function('a', 'b', 'return a + b')` はエラーをスローします。

**タイマー **  
`setTimeout()`、`setImmediate()`、`clearTimeout()` 関数はサポートされていません。関数実行中に defer または yield する規定はありません。関数は同期的に実行しないと完了できません。

**日付とタイムスタンプ**  
セキュリティ上の理由から、高解像度タイマーにはアクセスできません。現在の時刻を照会するすべての `Date` メソッドは、単一の関数実行の存続期間中は常に同じ値を返します。返されるタイムスタンプは、関数の実行を開始した時刻です。したがって、関数内で経過時間を測定することはできません。

**ファイルシステムへのアクセス**  
ファイルシステムにはアクセスできません。たとえば、Node.js にあるようなファイルシステムアクセス用の `fs` モジュールはありません。

**プロセスへのアクセス**  
プロセスにはアクセスできません。例えば、Node.js にあるような、情報アクセスを処理するための `process` グローバルオブジェクトはありません。

**環境変数**  
環境変数にはアクセスできません。  
この代わりに、CloudFront KeyValueStore を使用して、CloudFront Functions のための key-value ペアの一元化されたデータストアを作成できます。CloudFront KeyValueStore を使用すると、コード変更をデプロイする必要なく、設定データを動的に更新できます。CloudFront KeyValueStore を使用するには、[JavaScript ランタイム 2.0](functions-javascript-runtime-20.md) を使用する必要があります。詳細については、「[Amazon CloudFront KeyValueStore](kvs-with-functions.md)」を参照してください。

**ネットワークアクセス**  
ネットワークコールはサポートされていません。たとえば、XHR、HTTP (S)、ソケットはサポートされていません。

# CloudFront Functions の JavaScript ランタイム 2.0 の機能
<a name="functions-javascript-runtime-20"></a>

CloudFront Functions の JavaScript ランタイム環境は [ ECMAScript (ES) バージョン 5.1](https://262.ecma-international.org/5.1/) に準拠しており、ES バージョン 6～12 の一部の機能をサポートしています。また、ES 仕様に含まれない非標準メソッドも提供しています。次のトピックでは、このランタイムでサポートされるすべての機能を一覧表示します。

**Topics**
+ [

## 主要機能
](#writing-functions-javascript-features-core-20)
+ [

## プリミティブオブジェクト
](#writing-functions-javascript-features-primitive-objects-20)
+ [

## ビルトインオブジェクト
](#writing-functions-javascript-features-builtin-objects-20)
+ [

## エラーのタイプ
](#writing-functions-javascript-features-error-types-20)
+ [

## Globals
](#writing-functions-javascript-features-globals-20)
+ [

## ビルトインモジュール
](#writing-functions-javascript-features-builtin-modules-20)
+ [

## 制限された機能
](#writing-functions-javascript-features-restricted-features-20)

## 主要機能
<a name="writing-functions-javascript-features-core-20"></a>

ES の次の主要機能がサポートされています。

**Types]**  
すべての ES 5.1 タイプでサポートされています。これには、ブール値、数値、文字列、オブジェクト、配列、関数、正規表現が含まれます。

**演算子**  
すべての ES 5.1 演算子でサポートされています。  
ES 7 指数演算子 (`**`) がサポートされています。

**ステートメント**  
次の ES 5.1 ステートメントがサポートされています。  
+ `break`
+ `catch`
+ `continue`
+ `do-while`
+ `else`
+ `finally`
+ `for`
+ `for-in`
+ `if`
+ `label`
+ `return`
+ `switch`
+ `throw`
+ `try`
+ `var`
+ `while`
次の ES 6 ステートメントがサポートされています。  
+ `const`
+ `let`
次の ES 8 ステートメントがサポートされています。  
+ `async`
+ `await`
`async`、`await`、`const`、`let` は JavaScript ランタイム 2.0 でサポートされています。  
`await` は `async` 関数内でのみ使用できます。`async` 引数とクロージャはサポートされていません。

**リテラル**  
ES 6 テンプレートリテラル (複数行の文字列、式の補間、および入れ子テンプレート) がサポートされています。

**関数**  
すべての ES 5.1 機能がサポートされています。  
ES 6 のアロー関数、ES 6 のレストパラメータ (残余因数) 構文がサポートされています。

**Unicode**  
ソーステキストおよび文字列リテラルには、Unicode でエンコードされた文字を含めることができます。6 文字の Unicode エスケープシーケンス (コードポイント、例: `\uXXXX`) もサポートされています。

**Strict モード**  
関数は Strict モードで動作するため、関数コードに `use strict` ステートメントを追加する必要はありません。これは変更できません。

## プリミティブオブジェクト
<a name="writing-functions-javascript-features-primitive-objects-20"></a>

以下の ES プリミティブオブジェクトがサポートされています。

**オブジェクト**  
オブジェクトについて以下の ES 5.1 メソッドがサポートされています。  
+ `Object.create()` (プロパティリストなし)
+ `Object.defineProperties()`
+ `Object.defineProperty()`
+ `Object.freeze()`
+ `Object.getOwnPropertyDescriptor()`
+ `Object.getOwnPropertyDescriptors()`
+ `Object.getOwnPropertyNames()`
+ `Object.getPrototypeOf()`
+ `Object.isExtensible()`
+ `Object.isFrozen()`
+ `Object.isSealed()`
+ `Object.keys()`
+ `Object.preventExtensions()`
+ `Object.seal()`
オブジェクトについて以下の ES 6 メソッドがサポートされています。  
+ `Object.assign()`
オブジェクトについて以下の ES 8 メソッドがサポートされています。  
+ `Object.entries()`
+ `Object.values()`
オブジェクトについて以下の ES 5.1 プロトタイプメソッドがサポートされています。  
+ `Object.prototype.hasOwnProperty()`
+ `Object.prototype.isPrototypeOf()`
+ `Object.prototype.propertyIsEnumerable()`
+ `Object.prototype.toString()`
+ `Object.prototype.valueOf()`
オブジェクトについて以下の ES 6 プロトタイプメソッドがサポートされています。  
+ `Object.prototype.is()`
+ `Object.prototype.setPrototypeOf()`

**String**  
文字列について以下の ES 5.1 メソッドがサポートされています。  
+ `String.fromCharCode()`
文字列について以下の ES 6 メソッドがサポートされています。  
+ `String.fromCodePoint()`
文字列について以下の ES 5.1 プロトタイプメソッドがサポートされています。  
+ `String.prototype.charAt()`
+ `String.prototype.concat()`
+ `String.prototype.indexOf()`
+ `String.prototype.lastIndexOf()`
+ `String.prototype.match()`
+ `String.prototype.replace()`
+ `String.prototype.search()`
+ `String.prototype.slice()`
+ `String.prototype.split()`
+ `String.prototype.substr()`
+ `String.prototype.substring()`
+ `String.prototype.toLowerCase()`
+ `String.prototype.trim()`
+ `String.prototype.toUpperCase()`
文字列について以下の ES 6 プロトタイプメソッドがサポートされています。  
+ `String.prototype.codePointAt()`
+ `String.prototype.endsWith()`
+ `String.prototype.includes()`
+ `String.prototype.repeat()`
+ `String.prototype.startsWith()`
文字列について以下の ES 8 プロトタイプメソッドがサポートされています。  
+ `String.prototype.padStart()`
+ `String.prototype.padEnd()`
文字列について以下の ES 9 プロトタイプメソッドがサポートされています。  
+ `String.prototype.trimStart()`
+ `String.prototype.trimEnd()`
文字列について以下の ES 12 プロトタイプメソッドがサポートされています。  
+ `String.prototype.replaceAll()`
**注記**  
`String.prototype.replaceAll()` は JavaScript ランタイム 2.0 で新しく追加されました。

**Number**  
すべての ES 5 番号がサポートされています。  
番号について以下の ES 6 プロパティがサポートされています。  
+ `Number.EPSILON`
+ `Number.MAX_SAFE_INTEGER`
+ `Number.MIN_SAFE_INTEGER`
+ `Number.MAX_VALUE`
+ `Number.MIN_VALUE`
+ `Number.NaN`
+ `Number.NEGATIVE_INFINITY`
+ `Number.POSITIVE_INFINITY`
番号について以下の ES 6 メソッドがサポートされています。  
+ `Number.isFinite()`
+ `Number.isInteger()`
+ `Number.isNaN()`
+ `Number.isSafeInteger()`
+ `Number.parseInt()`
+ `Number.parseFloat()`
番号について以下の ES 5.1 プロトタイプメソッドがサポートされています。  
+ `Number.prototype.toExponential()`
+ `Number.prototype.toFixed()`
+ `Number.prototype.toPrecision()`
ES 12 数字区切り文字がサポートされています。  
ES 12 数字区切り文字は JavaScript ランタイム 2.0 で新しく追加されました。

## ビルトインオブジェクト
<a name="writing-functions-javascript-features-builtin-objects-20"></a>

ES の以下のビルトインオブジェクトがサポートされています。

**Math**  
ES 5.1 のすべての Math メソッドがサポートされています。  
CloudFront Functions runtime 環境では、`Math.random()` 実装に、関数が実行されたときのタイムスタンプがシードされた OpenBSD `arc4random` を使用します。
以下の ES 6 数学的プロパティがサポートされています。  
+ `Math.E`
+ `Math.LN10`
+ `Math.LN2`
+ `Math.LOG10E`
+ `Math.LOG2E`
+ `Math.PI`
+ `Math.SQRT1_2`
+ `Math.SQRT2`
以下の ES 6 Math メソッドがサポートされています。  
+ `Math.abs()`
+ `Math.acos()`
+ `Math.acosh()`
+ `Math.asin()`
+ `Math.asinh()`
+ `Math.atan()`
+ `Math.atan2()`
+ `Math.atanh()`
+ `Math.cbrt()`
+ `Math.ceil()`
+ `Math.clz32()`
+ `Math.cos()`
+ `Math.cosh()`
+ `Math.exp()`
+ `Math.expm1()`
+ `Math.floor()`
+ `Math.fround()`
+ `Math.hypot()`
+ `Math.imul()`
+ `Math.log()`
+ `Math.log1p()`
+ `Math.log2()`
+ `Math.log10()`
+ `Math.max()`
+ `Math.min()`
+ `Math.pow()`
+ `Math.random()`
+ `Math.round()`
+ `Math.sign()`
+ `Math.sinh()`
+ `Math.sin()`
+ `Math.sqrt()`
+ `Math.tan()`
+ `Math.tanh()`
+ `Math.trunc()`

**日付**  
すべての ES 5.1 の `Date` 機能がサポートされています。  
セキュリティ上の理由から、`Date` は、単一の関数実行の有効期間中、常に同じ値 (関数の開始時間) を返します。詳細については、「[制限された機能](functions-javascript-runtime-10.md#writing-functions-javascript-features-restricted-features)」を参照してください。

**関数**  
以下の ES 5.1 プロトタイプメソッドがサポートされています。  
+ `Function.prototype.apply()`
+ `Function.prototype.bind()`
+ `Function.prototype.call()`
関数コンストラクタはサポートされていません。

**正規表現**  
すべての ES 5.1 の正規表現機能がサポートされています。正規表現言語は Perl 互換です。  
以下の ES 5.1 プロトタイプアクセサプロパティがサポートされています。  
+ `RegExp.prototype.global`
+ `RegExp.prototype.ignoreCase`
+ `RegExp.protoype.multiline`
+ `RegExp.protoype.source`
+ `RegExp.prototype.sticky`
+ `RegExp.prototype.flags`
**注記**  
`RegExp.prototype.sticky` および `RegExp.prototype.flags` は JavaScript ランタイム 2.0 で新しく追加されました。
以下の ES 5.1 プロトタイプメソッドがサポートされています。  
+ `RegExp.prototype.exec()`
+ `RegExp.prototype.test()`
+ `RegExp.prototype.toString()`
+ `RegExp.prototype[@@replace]()`
+ `RegExp.prototype[@@split]()`
**注記**  
`RegExp.prototype[@@split]()` は JavaScript ランタイム 2.0 で新しく追加されました。
以下の ES 5.1 インスタンスプロパティがサポートされています。  
+ `lastIndex`
ES 9 の名前付きキャプチャグループがサポートされています。

**JSON**  
以下の ES 5.1 メソッドがサポートされています。  
+ `JSON.parse()`
+ `JSON.stringify()`

**配列**  
配列について以下の ES 5.1 メソッドがサポートされています。  
+ `Array.isArray()`
配列について以下の ES 6 メソッドがサポートされています。  
+ `Array.of()`
以下の ES 5.1 プロトタイプメソッドがサポートされています。  
+ `Array.prototype.concat()`
+ `Array.prototype.every()`
+ `Array.prototype.filter()`
+ `Array.prototype.forEach()`
+ `Array.prototype.indexOf()`
+ `Array.prototype.join()`
+ `Array.prototype.lastIndexOf()`
+ `Array.prototype.map()`
+ `Array.prototype.pop()`
+ `Array.prototype.push()`
+ `Array.prototype.reduce()`
+ `Array.prototype.reduceRight()`
+ `Array.prototype.reverse()`
+ `Array.prototype.shift()`
+ `Array.prototype.slice()`
+ `Array.prototype.some()`
+ `Array.prototype.sort()`
+ `Array.prototype.splice()`
+ `Array.prototype.unshift()`
以下の ES 6 プロトタイプメソッドがサポートされています。  
+ `Array.prototype.copyWithin()`
+ `Array.prototype.fill()`
+ `Array.prototype.find()`
+ `Array.prototype.findIndex()`
以下の ES 7 プロトタイプメソッドがサポートされています。  
+ `Array.prototype.includes()`

**型付き配列**  
以下の ES 6 型付き配列コンストラクターがサポートされています。  
+ `Float32Array`
+ `Float64Array`
+ `Int8Array`
+ `Int16Array`
+ `Int32Array`
+ `Uint8Array`
+ `Uint8ClampedArray`
+ `Uint16Array`
+ `Uint32Array`
以下の ES 6 メソッドがサポートされています。  
+ `TypedArray.from()`
+ `TypedArray.of()`
**注記**  
`TypedArray.from()` および `TypedArray.of()` は JavaScript ランタイム 2.0 で新しく追加されました。
以下の ES 6 プロトタイプメソッドがサポートされています。  
+ `TypedArray.prototype.copyWithin()`
+ `TypedArray.prototype.every()`
+ `TypedArray.prototype.fill()`
+ `TypedArray.prototype.filter()`
+ `TypedArray.prototype.find()`
+ `TypedArray.prototype.findIndex()`
+ `TypedArray.prototype.forEach()`
+ `TypedArray.prototype.includes()`
+ `TypedArray.prototype.indexOf()`
+ `TypedArray.prototype.join()`
+ `TypedArray.prototype.lastIndexOf()`
+ `TypedArray.prototype.map()`
+ `TypedArray.prototype.reduce()`
+ `TypedArray.prototype.reduceRight()`
+ `TypedArray.prototype.reverse()`
+ `TypedArray.prototype.some()`
+ `TypedArray.prototype.set()`
+ `TypedArray.prototype.slice()`
+ `TypedArray.prototype.sort()`
+ `TypedArray.prototype.subarray()`
+ `TypedArray.prototype.toString()`
**注記**  
`TypedArray.prototype.every()`、`TypedArray.prototype.fill()`、`TypedArray.prototype.filter()`、`TypedArray.prototype.find()`、`TypedArray.prototype.findIndex()`、`TypedArray.prototype.forEach()`、`TypedArray.prototype.includes()`、`TypedArray.prototype.indexOf()`、`TypedArray.prototype.join()`、`TypedArray.prototype.lastIndexOf()`、`TypedArray.prototype.map()`、`TypedArray.prototype.reduce()`、`TypedArray.prototype.reduceRight()`、`TypedArray.prototype.reverse()`、および `TypedArray.prototype.some()` は JavaScript ランタイム 2.0 で新しく追加されました。

**ArrayBuffer**  
ArrayBuffer について以下の ES 6 メソッドがサポートされています。  
+ `isView()`
ArrayBuffer について以下の ES 6 プロトタイプメソッドがサポートされています。  
+ `ArrayBuffer.prototype.slice()`

**promise**  
Promise について以下の ES 6 メソッドがサポートされています。  
+ `Promise.all()`
+ `Promise.allSettled()`
+ `Promise.any()`
+ `Promise.reject()`
+ `Promise.resolve()`
+ `Promise.race()`
**注記**  
`Promise.all()`、`Promise.allSettled()`、`Promise.any()`、`Promise.race()` は JavaScript ランタイム 2.0 で新しく追加されました。
Promise について以下の ES 6 プロトタイプメソッドがサポートされています。  
+ `Promise.prototype.catch()`
+ `Promise.prototype.finally()`
+ `Promise.prototype.then()`

**DataView**  
以下の ES 6 プロトタイプメソッドがサポートされています。  
+ `DataView.prototype.getFloat32()`
+ `DataView.prototype.getFloat64()`
+ `DataView.prototype.getInt16()`
+ `DataView.prototype.getInt32()`
+ `DataView.prototype.getInt8()`
+ `DataView.prototype.getUint16()`
+ `DataView.prototype.getUint32()`
+ `DataView.prototype.getUint8()`
+ `DataView.prototype.setFloat32()`
+ `DataView.prototype.setFloat64()`
+ `DataView.prototype.setInt16()`
+ `DataView.prototype.setInt32()`
+ `DataView.prototype.setInt8()`
+ `DataView.prototype.setUint16()`
+ `DataView.prototype.setUint32()`
+ `DataView.prototype.setUint8()`
**注記**  
Dataview ES 6 のプロトタイプメソッドはすべて JavaScript ランタイム 2.0 で新しく追加されました。

**記号**  
以下の ES 6 メソッドがサポートされています。  
+ `Symbol.for()`
+ `Symbol.keyfor()`
**注記**  
Symbol ES 6 メソッドはすべて JavaScript ランタイム 2.0 で新しく追加されました。

**テキストデコーダー**  
以下のプロトタイプメソッドがサポートされています。  
+ `TextDecoder.prototype.decode()`
以下のプロトタイプアクセサプロパティがサポートされています。  
+ `TextDecoder.prototype.encoding`
+ `TextDecoder.prototype.fatal`
+ `TextDecoder.prototype.ignoreBOM`

**テキストエンコーダー**  
以下のプロトタイプメソッドがサポートされています。  
+ `TextEncoder.prototype.encode()`
+ `TextEncoder.prototype.encodeInto()`

## エラーのタイプ
<a name="writing-functions-javascript-features-error-types-20"></a>

以下のエラーオブジェクトがサポートされています。
+ `Error`
+ `EvalError`
+ `InternalError`
+ `RangeError`
+ `ReferenceError`
+ `SyntaxError`
+ `TypeError`
+ `URIError`

## Globals
<a name="writing-functions-javascript-features-globals-20"></a>

`globalThis` オブジェクトはサポートされています。

以下の ES 5.1 グローバル関数がサポートされています。
+ `decodeURI()`
+ `decodeURIComponent()`
+ `encodeURI()`
+ `encodeURIComponent()`
+ `isFinite()`
+ `isNaN()`
+ `parseFloat()`
+ `parseInt()`

以下の ES 6 グローバル関数がサポートされています。
+ `atob()`
+ `btoa()`
**注記**  
`atob()` および `btoa()` は JavaScript ランタイム 2.0 で新しく追加されました。

以下のグローバル定数がサポートされています。
+ `NaN`
+ `Infinity`
+ `undefined`
+ `arguments`

## ビルトインモジュール
<a name="writing-functions-javascript-features-builtin-modules-20"></a>

以下のビルトインモジュールがサポートされています。

**Topics**
+ [

### バッファ
](#writing-functions-javascript-features-builtin-modules-buffer-20)
+ [

### クエリ文字列
](#writing-functions-javascript-features-builtin-modules-query-string-20)
+ [

### Crypto
](#writing-functions-javascript-features-builtin-modules-crypto-20)

### バッファ
<a name="writing-functions-javascript-features-builtin-modules-buffer-20"></a>

このモジュールは、以下のメソッドを提供します。
+ `Buffer.alloc(size[, fill[, encoding]])`

  `Buffer` を割り当てます。
  + `size`: バッファサイズ。整数を入力します。
  + `fill`: オプション。文字列、`Buffer`、Uint8Array または整数を入力します。デフォルトは `0` です。
  + `encoding`: オプション。`fill` が文字列である場合は、`utf8`、`hex`、`base64`、`base64url` のいずれかを入力します。デフォルトは `utf8` です。
+ `Buffer.allocUnsafe(size)`

  初期化されていない `Buffer` を割り当てます。
  + `size`: 整数を入力します。
+ `Buffer.byteLength(value[, encoding])`

  値の長さをバイト単位で返します。
  + `value`: 文字列、`Buffer`、TypedArray、Dataview、または Arraybuffer。
  + `encoding`: オプション。`value` が文字列である場合は、`utf8`、`hex`、`base64`、`base64url` のいずれかを入力します。デフォルトは `utf8` です。
+ `Buffer.compare(buffer1, buffer2)`

  2 つの `Buffer` を比較すると、配列をソートしやすくなります。両者が同じ場合は `0`、`buffer1` が先に来る場合は `-1`、`buffer2` が先に来る場合は `1` を返します。
  + `buffer1`: `Buffer` を入力します。
  + `buffer2`: 別の `Buffer` 値を入力します。
+ `Buffer.concat(list[, totalLength])`

  複数の `Buffer` を連結します。ない場合は `0` を返します。`totalLength` までの値を返します。
  + `list`: `Buffer` のリストを入力します。これは `totalLength` に切り捨てられることに注意してください。
  + `totalLength`: オプション。符号なし整数を入力します。空欄の場合はリスト内の `Buffer` インスタンス総数を使用します。
+ `Buffer.from(array)`

  配列から `Buffer` を作成します。
  + `array`: `0` から `255` までのバイト配列を入力します。
+ `Buffer.from(arrayBuffer, byteOffset[, length]))`

  オフセット `byteOffset` から始めて長さが `length` のビューを `arrayBuffer` から作成します。
  + `arrayBuffer`: `Buffer` 配列を入力します。
  + `byteOffset`: 整数を入力します。
  + `length`: オプション。整数を入力します。
+ `Buffer.from(buffer)`

  `Buffer` のコピーを作成します。
  + `buffer`: `Buffer` を入力します。
+ `Buffer.from(object[, offsetOrEncoding[, length]])`

  オブジェクトから `Buffer` を作成します。`valueOf()` がオブジェクトと等しくない場合は `Buffer.from(object.valueOf(), offsetOrEncoding, length)` を返します。
  + `object`: オブジェクトを入力します。
  + `offsetOrEncoding`: オプション。整数またはエンコーディング文字列を入力します。
  + `length`: オプション。整数を入力します。
+ `Buffer.from(string[, encoding])`

  文字列から `Buffer` を作成します。
  + `string`: 文字列を入力します。
  + `encoding`: オプション。`utf8`、`hex`、`base64`、`base64url` のいずれかを入力します。デフォルトは `utf8` です。
+ `Buffer.isBuffer(object)`

  `object` がバッファかどうかをチェックします。`true` または `false` を返します。
  + `object`: オブジェクトを入力します。
+ `Buffer.isEncoding(encoding)`

  `encoding` がサポートされているかをチェックします。`true` または `false` を返します。
  + `encoding`: オプション。`utf8`、`hex`、`base64`、`base64url` のいずれかを入力します。デフォルトは `utf8` です。

このモジュールは、以下のバッファプロトタイプメソッドを提供します。
+ `Buffer.prototype.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])`

  ターゲットと `Buffer` を比較します。両者が同じ場合は `0`、`buffer` が先に来る場合は `1`、`target` が先に来る場合は `-1` を返します。
  + `target`: `Buffer` を入力します。
  + `targetStart`: オプション。整数を入力します。デフォルトは 0 です。
  + `targetEnd`: オプション。整数を入力します。デフォルトは `target` の長さです。
  + `sourceStart`: オプション。整数を入力します。デフォルトは 0 です。
  + `sourceEnd`: オプション。整数を入力します。デフォルトは `Buffer` の長さです。
+ `Buffer.prototype.copy(target[, targetStart[, sourceStart[, sourceEnd]]])`

  バッファを `target` にコピーします。
  + `target`: `Buffer` または `Uint8Array` を入力します。
  + `targetStart`: オプション。整数を入力します。デフォルトは 0 です。
  + `sourceStart`: オプション。整数を入力します。デフォルトは 0 です。
  + `sourceEnd`: オプション。整数を入力します。デフォルトは `Buffer` の長さです。
+ `Buffer.prototype.equals(otherBuffer)`

  `Buffer` と `otherBuffer` を比較します。`true` または `false` を返します。
  + `otherBuffer`: 文字列を入力します。
+ `Buffer.prototype.fill(value[, offset[, end][, encoding])`

  `value` に `Buffer` を入力します。
  + `value`: 文字列、`Buffer`、または整数を入力します。
  + `offset`: オプション。整数を入力します。
  + `end`: オプション。整数を入力します。
  + `encoding`: オプション。`utf8`、`hex`、`base64`、`base64url` のいずれかを入力します。デフォルトは `utf8` です。
+ `Buffer.prototype.includes(value[, byteOffset][, encoding])`

  `value` で `Buffer` を検索します。`true` または `false` を返します。
  + `value`: 文字列、`Buffer`、`Uint8Array`、または整数を入力します。
  + `byteOffset`: オプション。整数を入力します。
  + `encoding`: オプション。`utf8`、`hex`、`base64`、`base64url` のいずれかを入力します。デフォルトは `utf8` です。
+ `Buffer.prototype.indexOf(value[, byteOffset][, encoding])`

  `Buffer` で最初の `value` を検索します。見つかった場合は `index` を返し、見つからなかった場合は `-1` を返します。
  + `value`: 文字列、`Buffer`、Unit8Array、または 0 から 255 までの整数を入力します。
  + `byteOffset`: オプション。整数を入力します。
  + `encoding`: オプション。`value` が文字列の場合、`utf8`、`hex`、`base64`、`base64url` のいずれかを入力します。デフォルトは `utf8` です。
+ `Buffer.prototype.lastIndexOf(value[, byteOffset][, encoding])`

  `Buffer` で最後の `value` を検索します。見つかった場合は `index` を返し、見つからなかった場合は `-1` を返します。
  + `value`: 文字列、`Buffer`、Unit8Array、または 0 から 255 までの整数を入力します。
  + `byteOffset`: オプション。整数を入力します。
  + `encoding`: オプション。`value` が文字列の場合、`utf8`、`hex`、`base64`、`base64url` のいずれかを入力します。デフォルトは `utf8` です。
+ `Buffer.prototype.readInt8(offset)`

  `Buffer` から `offset` で `Int8` を読み込みます。
  + `offset`: 整数を入力します。
+ `Buffer.prototype.readIntBE(offset, byteLength)`

  `Buffer` から `offset` で `Int` をビッグエンディアンとして読み取ります。
  + `offset`: 整数を入力します。
  + `byteLength`: オプション。`1` から `6` までの整数を入力します。
+ `Buffer.prototype.readInt16BE(offset)`

  `Buffer` から `offset` で `Int16` をビッグエンディアンとして読み取ります。
  + `offset`: 整数を入力します。
+ `Buffer.prototype.readInt32BE(offset)`

  `Buffer` から `offset` で `Int32` をビッグエンディアンとして読み取ります。
  + `offset`: 整数を入力します。
+ `Buffer.prototype.readIntLE(offset, byteLength)`

  `Buffer` から `offset` で `Int` をリトルエンディアンとして読み取ります。
  + `offset`: 整数を入力します。
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.readInt16LE(offset)`

  `Buffer` から `offset` で `Int16` をリトルエンディアンとして読み取ります。
  + `offset`: 整数を入力します。
+ `Buffer.prototype.readInt32LE(offset)`

  `Buffer` から `offset` で `Int32` をリトルエンディアンとして読み取ります。
  + `offset`: 整数を入力します。
+ `Buffer.prototype.readUInt8(offset)`

  `Buffer` から `offset` で `UInt8` を読み込みます。
  + `offset`: 整数を入力します。
+ `Buffer.prototype.readUIntBE(offset, byteLength)`

  `Buffer` から `offset` で `UInt` をビッグエンディアンとして読み取ります。
  + `offset`: 整数を入力します。
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.readUInt16BE(offset)`

  `Buffer` から `offset` で `UInt16` をビッグエンディアンとして読み取ります。
+ 
  + `offset`: 整数を入力します。
+ `Buffer.prototype.readUInt32BE(offset)`

  `Buffer` から `offset` で `UInt32` をビッグエンディアンとして読み取ります。
  + `offset`: 整数を入力します。
+ `Buffer.prototype.readUIntLE(offset, byteLength)`

  `Buffer` から `offset` で `UInt` をリトルエンディアンとして読み取ります。
  + `offset`: 整数を入力します。
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.readUInt16LE(offset)`

  `Buffer` から `offset` で `UInt16` をリトルエンディアンとして読み取ります。
  + `offset`: 整数を入力します。
+ `Buffer.prototype.readUInt32LE(offset)`

  `Buffer` から `offset` で `UInt32` をリトルエンディアンとして読み取ります。
  + `offset`: 整数を入力します。
+ `Buffer.prototype.readDoubleBE([offset])`

  `Buffer` から `offset` で 64 ビットダブルをビッグエンディアンとして読み込みます。
  + `offset`: オプション。整数を入力します。
+ `Buffer.prototype.readDoubleLE([offset])`

  `Buffer` から `offset` で 64 リトルダブルをビッグエンディアンとして読み込みます。
  + `offset`: オプション。整数を入力します。
+ `Buffer.prototype.readFloatBE([offset])`

  `Buffer` から `offset` で 32 ビットフロートをビッグエンディアンとして読み込みます。
  + `offset`: オプション。整数を入力します。
+ `Buffer.prototype.readFloatLE([offset])`

  `Buffer` から `offset` で 32 ビットフロートをリトルエンディアンとして読み込みます。
  + `offset`: オプション。整数を入力します。
+ `Buffer.prototype.subarray([start[, end]])`

  オフセットし、新しい `start` および `end` で切り取った `Buffer` のコピーを返します。
  + `start`: オプション。整数を入力します。デフォルトは 0 です。
  + `end`: オプション。整数を入力します。デフォルトはバッファの長さです。
+ `Buffer.prototype.swap16()`

  `Buffer` 配列のバイト順を入れ替え、16 ビットの数値の配列として扱います。`Buffer` の長さは 2 で割り切れる必要があります。そうしないと、エラーになります。
+ `Buffer.prototype.swap32()`

  `Buffer` 配列のバイト順を入れ替え、32 ビットの数値の配列として扱います。`Buffer` の長さは 4 で割り切れる必要があります。そうしないと、エラーになります。
+ `Buffer.prototype.swap64()`

  `Buffer` 配列のバイト順を入れ替え、64 ビットの数値の配列として扱います。`Buffer` の長さは 8 で割り切れる必要があります。そうしないと、エラーになります。
+ `Buffer.prototype.toJSON()`

  JSON として `Buffer` を返します。
+ `Buffer.prototype.toString([encoding[, start[, end]]])`

  `start` から `end` まで `Buffer` をエンコードされた文字列に変換します。
  + `encoding`: オプション。`utf8`、`hex`、`base64`、`base64url` のいずれかを入力します。デフォルトは `utf8` です。
  + `start`: オプション。整数を入力します。デフォルトは 0 です。
  + `end`: オプション。整数を入力します。デフォルトはバッファの長さです。
+ `Buffer.prototype.write(string[, offset[, length]][, encoding])`

  スペースがある場合はエンコードされた `string` を `Buffer` に書き込み、十分なスペースがない場合は切り捨てられた `string` になります。
  + `string`: 文字列を入力します。
  + `offset`: オプション。整数を入力します。デフォルトは 0 です。
  + `length`: オプション。整数を入力します。デフォルトは文字列の長さです。
  + `encoding`: オプション。オプションで、`utf8`、`hex`、`base64`、または `base64url` のいずれかを入力します。デフォルトは `utf8` です。
+ `Buffer.prototype.writeInt8(value, offset, byteLength)`

  `offset` で `byteLength` の `Int8` `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  + `offset`: 整数を入力します
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeIntBE(value, offset, byteLength)`

  ビッグエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  + `offset`: 整数を入力します
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeInt16BE(value, offset, byteLength)`

  ビッグエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  + `offset`: 整数を入力します
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeInt32BE(value, offset, byteLength)`

  ビッグエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  + `offset`: 整数を入力します
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeIntLE(offset, byteLength)`

  リトルエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `offset`: 整数を入力します。
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeInt16LE(offset, byteLength)`

  リトルエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `offset`: 整数を入力します。
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeInt32LE(offset, byteLength)`

  リトルエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `offset`: 整数を入力します。
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeUInt8(value, offset, byteLength)`

  `offset` で `byteLength` の `UInt8` `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  + `offset`: 整数を入力します
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeUIntBE(value, offset, byteLength)`

  ビッグエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  + `offset`: 整数を入力します
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeUInt16BE(value, offset, byteLength)`

  ビッグエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  + `offset`: 整数を入力します
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeUInt32BE(value, offset, byteLength)`

  ビッグエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  + `offset`: 整数を入力します
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeUIntLE(value, offset, byteLength)`

  リトルエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  + `offset`: 整数を入力します
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeUInt16LE(value, offset, byteLength)`

  リトルエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  + `offset`: 整数を入力します
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeUInt32LE(value, offset, byteLength)`

  リトルエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  + `offset`: 整数を入力します
  + `byteLength`: `1` から `6` までの整数を入力します。
+ `Buffer.prototype.writeDoubleBE(value, [offset])`

  ビッグエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  +  `offset`: オプション。整数を入力します。デフォルトは 0 です。
+ `Buffer.prototype.writeDoubleLE(value, [offset])`

  リトルエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  +  `offset`: オプション。整数を入力します。デフォルトは 0 です。
+ `Buffer.prototype.writeFloatBE(value, [offset])`

  ビッグエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  +  `offset`: オプション。整数を入力します。デフォルトは 0 です。
+ `Buffer.prototype.writeFloatLE(value, [offset])`

  リトルエンディアンを使用して `offset` の `value` を `Buffer` に書き込みます。
  + `value`: 整数を入力します。
  +  `offset`: オプション。整数を入力します。デフォルトは 0 です。

以下のインスタンスメソッドがサポートされています。
+ `buffer[index]`

  `Buffer` `index` でオクテット (バイト) を取得および設定します。
  + `0` から `255` までの数値を取得します。または、`0` から `255` までの数値を設定します。

以下のインスタンスプロパティがサポートされています。
+ `buffer`

  バッファの `ArrayBuffer` オブジェクトを取得します。
+ `byteOffset`

  バッファの `Arraybuffer` オブジェクトの `byteOffset` を取得します。
+ `length`

  バッファのバイト数を取得します。

**注記**  
バッファモジュールメソッドはすべて JavaScript ランタイム 2.0 で新しく追加されました。

### クエリ文字列
<a name="writing-functions-javascript-features-builtin-modules-query-string-20"></a>

**注記**  
[CloudFront Functions イベントオブジェクト](functions-event-structure.md)は、URL クエリ文字列を自動的に解析します。つまり、ほとんどの場合、このモジュールを使用する必要はありません。

クエリ文字列モジュール (`querystring`) は、URL クエリ文字列を解析および書式設定するためのメソッドを提供します。`require('querystring')` を使用してモジュールをロードできます。このモジュールは、以下のメソッドを提供します。

`querystring.escape(string)`  
URL は `string` をエンコードし、エスケープしたクエリ文字列を返します。このメソッドは `querystring.stringify()` で使用するため、直接使用しないでください。

`querystring.parse(string[, separator[, equal[, options]]])`  
クエリ文字列 (`string`) を解析し、オブジェクトを返します。  
`separator` パラメータは、クエリ文字列のキーと値のペアを区切る substring です。デフォルトでは、`&` です。  
`equal` パラメータは、クエリ文字列のキーと値を区切る substring です。デフォルトでは、`=` です。  
`options` パラメータは、以下のキーを持つオブジェクトです。    
`decodeURIComponent function`  
クエリ文字列のパーセントエンコーディングされた文字を decode する関数です。デフォルトでは、`querystring.unescape()` です。  
`maxKeys number`  
解析するキーの最大数。デフォルトでは、`1000` です。キーカウントの制限を解除するには、`0` の値を使用します。
デフォルトでは、クエリ文字列のパーセントエンコーディングされた文字は、UTF-8 エンコーディングを使用していると見なされます。無効な UTF-8 シーケンスは、`U+FFFD` 置換文字に置き換えられます。  
たとえば、次のクエリ文字列の場合:  

```
'name=value&abc=xyz&abc=123'
```
`querystring.parse()`の戻り値は次のとおりです。  

```
{
name: 'value',
abc: ['xyz', '123']
}
```
`querystring.decode()` は のエイリアスです。`querystring.parse()`

`querystring.stringify(object[, separator[, equal[, options]]])`  
`object` をシリアル化し、クエリ文字列を返します。  
`separator` パラメータは、クエリ文字列のキーと値のペアを区切る substring です。デフォルトでは、`&` です。  
`equal` パラメータは、クエリ文字列のキーと値を区切る substring です。デフォルトでは、`=` です。  
`options` パラメータは、以下のキーを持つオブジェクトです。    
`encodeURIComponent function`  
URL-unsafe 文字をクエリ文字列のパーセントエンコーディングに変換するために使用される関数です。デフォルトでは、`querystring.escape()` です。
デフォルトでは、クエリ文字列でパーセントエンコーディングが必要な文字は UTF-8 としてエンコードされます。別のエンコーディングを使用するには、`encodeURIComponent` オプションを指定します。  
以下のコードでの例:  

```
querystring.stringify({ name: 'value', abc: ['xyz', '123'], anotherName: '' });
```
戻り値:  

```
'name=value&abc=xyz&abc=123&anotherName='
```
`querystring.encode()` は のエイリアスです。`querystring.stringify()`

`querystring.unescape(string)`  
指定された `string` 内の URL パーセントエンコーディングされた文字をデコードし、エスケープしていないクエリ文字列を返します。このメソッドは `querystring.parse()`で使用するため、直接使用しないでください。

### Crypto
<a name="writing-functions-javascript-features-builtin-modules-crypto-20"></a>

暗号モジュール (`crypto`) は、標準のハッシュおよびハッシュベースのメッセージ認証コード (HMAC) ヘルパーを提供します。`require('crypto')` を使用してモジュールをロードできます。

**ハッシュメソッド**

`crypto.createHash(algorithm)`  
ハッシュオブジェクトを作成して返します。このハッシュオブジェクトは、指定されたアルゴリズム (`md5`、`sha1`、`sha256` のいずれか) を使用してハッシュダイジェストの生成に使用できます。

`hash.update(data)`  
指定された `data` を使用してハッシュコンテンツを更新します。

`hash.digest([encoding])`  
`hash.update()` を使用して渡されたすべてのデータのダイジェストを計算します。エンコードは `hex`、`base64`、`base64url` のいずれかを使用します。

**HMAC メソッド**

`crypto.createHmac(algorithm, secret key)`  
指定された `algorithm` と `secret key` を使用する HMAC オブジェクトを作成して返します。アルゴリズムは `md5`、`sha1`、`sha256` のいずれかを使用します。

`hmac.update(data)`  
指定された `data` を使用して HMAC コンテンツを更新します 。

`hmac.digest([encoding])`  
`hmac.update()` を使用して渡されたすべてのデータのダイジェストを計算します。エンコードは `hex`、`base64`、`base64url` のいずれかを使用します。

## 制限された機能
<a name="writing-functions-javascript-features-restricted-features-20"></a>

次の JavaScript 言語機能は、セキュリティ上の問題により、サポートされていないか、制限されています。

**動的コード評価**  
動的コード評価はサポートされていません。`eval()`、`Function` 両方のコンストラクタが試行された場合、エラーをスローします。たとえば、`const sum = new Function('a', 'b', 'return a + b')` はエラーをスローします。

**タイマー **  
`setTimeout()`、`setImmediate()`、`clearTimeout()` 関数はサポートされていません。関数実行中に defer または yield する規定はありません。関数は同期的に実行しないと完了できません。

**日付とタイムスタンプ**  
セキュリティ上の理由から、高解像度タイマーにはアクセスできません。現在の時刻を照会するすべての `Date` メソッドは、単一の関数実行の存続期間中は常に同じ値を返します。返されるタイムスタンプは、関数の実行を開始した時刻です。したがって、関数内で経過時間を測定することはできません。

**ファイルシステムへのアクセス**  
ファイルシステムにはアクセスできません。たとえば、Node.js にあるようなファイルシステムアクセス用の `fs` モジュールはありません。

**プロセスへのアクセス**  
プロセスにはアクセスできません。例えば、Node.js にあるような、情報アクセスを処理するための `process` グローバルオブジェクトはありません。

**環境変数**  
環境変数にはアクセスできません。この代わりに、CloudFront KeyValueStore を使用して、CloudFront Functions のための key-value ペアの一元化されたデータストアを作成できます。CloudFront KeyValueStore を使用すると、コード変更をデプロイする必要なく、設定データを動的に更新できます。詳細については、「[Amazon CloudFront KeyValueStore](kvs-with-functions.md)」を参照してください。

**ネットワークアクセス**  
ネットワークコールはサポートされていません。たとえば、XHR、HTTP (S)、ソケットはサポートされていません。