3 新機能

Oracle APEXリリース22.2には、多数の新機能が含まれています。次の新機能は、APEXリリース22.1およびそれ以前のリリースには存在しません。

3.1 アプリケーション検索

APEXには、新しい宣言型検索機能があります。
  • 検索可能なデータ・ソース、検索機能および表示テンプレートを定義することで、複数の検索構成を作成します
  • ローカル・データベース内の表を検索するか、REST対応SQLまたは外部RESTデータ・ソースを使用します
  • 言語分析検索機能とファジー検索機能にOracleテキストを活用します
  • 単一のアプリケーションに複数の検索ウィジェットを追加することで、エンド・ユーザーに検索機能を提供します
  • 次のオプションを構成できます:
    • ページ区切り
    • 逐次検索
    • カスタム・レイアウト
    • ページ・サイズ制限
    • 結果表示件数
    • 遅延ロード
    • ソート
    • 問合せが入力されなかった場合と結果が見つからなかった場合のカスタム・メッセージ
ユーザーが検索文字列を入力すると、検索構成が実行され、関連する検索結果が返されます。

3.2 「APIの呼出し」プロセス・タイプ

「APIの呼出し」という新しいページレベル・プロセス・タイプを使用すると、PL/SQLコードを記述することなく、プロシージャおよびファンクションをすべて宣言的に実行できます。
  • ページ・デザイナでは、自動的にパラメータが事前設定され、一致するページ・アイテムまたは対話グリッド列(使用可能な場合)にそれらがマップされます。
  • 「パラメータの同期」を使用してパラメータ定義をリフレッシュします。
  • 「APIの呼出し」は、PL/SQLデータ型(NUMBERDATETIMESTAMPBOOLEANCLOBBLOBなど)に十分に対応しています。
  • PL/SQLレコードなどの複合データ型がサポートされています。
  • パラメータ値に静的値、SQL問合せ、ページ・アイテム、式、およびファンクションの結果が移入されます。
  • パラメータまたはファンクションの出力がページ・アイテムに格納されます。
  • 型変換でページ・アイテムの書式マスクが自動的に使用されます。
  • BOOLEAN変換で「切替え」および「チェックボックス」アイテム・タイプの構成が自動的に使用されます。

制限事項

Oracleデータベース12r1では、BOOLEANパラメータがある場合は「APIの呼出し」を使用できません。

3.3 新しい「動的コンテンツ」リージョン

新しいネイティブ・リージョン・タイプ「動的コンテンツ」があります。「動的コンテンツ」リージョンは、「PL/SQL動的コンテンツ」リージョンに似ていますが、次の点が異なります。
  • リージョン・ソースによってHTML値がCLOBとして返される必要があります。この値は、HTPパッケージを介して出力されなくなります。
  • このリージョンはリフレッシュ可能です。
  • このリージョンでは遅延ロードがサポートされています。
  • このリージョンでは、PL/SQLおよびJavaScript (MLE)がサポートされています。
「PL/SQL動的コンテンツ」リージョンは「レガシー」とマークされるようになりましたが、引き続き機能します。既存のリージョンを新しい「動的コンテンツ」リージョン・タイプに移動することをお薦めします。この移動は手動で実行します。これは、HTPパッケージを使用するのではなく、CLOBを返すようにリージョン・ソース・コードを変換する必要があるためです。
既存のリージョンを問い合せるには、次を実行します。
select application_id, page_id, region_name
  from apex_application_page_regions
 where source_type = 'PL/SQL';

3.4 更新された承認機能

新機能

承認コンポーネントに新しい機能があります。

タスク定義のコピー: 開発者が、同じアプリケーション内で、またはあるアプリケーションから別のアプリケーションに、既存のタスク定義をコピーできるようになりました。「参加者」、「アクション」および「パラメータ」がコピーされます。タスク定義で使用されている共有コンポーネント(電子メール・テンプレートやRESTデータ・ソースなど)は、ターゲット・アプリケーションにコピーされます(まだ存在しない場合)。

「情報のリクエスト」と「情報の発行」:タスク所有者が、タスクの完了前にさらに情報をリクエストできるようになりました。これにより、タスクがタスク・イニシエータに送り返されます。タスク・イニシエータは、不足している情報を入力した後、承認を受けるためにそれを所有者に返します。

アクションのロギング: アクションをタスク履歴ログに記録できるようになりました。タスク定義アクション・エディタでロギングを構成します。成功したアクション、失敗したアクション、またはすべてのアクションをログに記録するか、アクションをログに記録しないかを選択できます。成功メッセージまたはエラー・メッセージを定義すると、タスク履歴の「メッセージ」列にそれが追加されます。

期日の更新: ビジネス管理者が、進行中のタスクの期日を更新できるようになりました。期日の変更は、現在のタスク・インスタンスにのみ影響します。タスク定義で設定された期日は変更されません。

動的期日: 期日は、基本的には、SQL問合せ、式またはファンクション本体で動的に設定できるようになりました。この期日は、タスクの作成時に、次の3つの属性に基づいて計算されます。
  1. 「期日タイプ」。これは、INTERVALSQL QUERYEXPRESSIONFUNCTION BODYまたはSCHEDULER_EXPRESSIONとして設定できます。
  2. 期日言語。これは、「期日タイプ」がSQL QUERYEXPRESSIONまたはFUNCTION BODYである場合に使用されます。それ以外の場合、これはNullになります。
  3. 期日間隔。「期日タイプ」がINTERVALである場合、この値は、ISOまたはSQL形式での間隔となります。それ以外の場合は、このフィールド内の問合せまたは式を使用してその日付が評価されます。

詳細日付構成: 「期日タイプ」がSCHEDULER_EXPRESSIONである場合は、式フィールドに、有効なDBMS_SCHEDULERフィルタリング式が含まれている必要があります。APEXでは、実行時に、DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING()を使用してその式が評価されます。

ISOまたはSQL間隔形式を選択した場合、22.2で作成された新しいタスク定義は、「期日タイプ」がINTERVALになります。

最終期限およびタスク有効期限: タスクは、「有効期限ポリシー」に基づいて、タスク期日をすぎると失効するか更新されるように設定できます。タスク期日をすぎても完了していないタスクは、次のような状態である可能性があります。
  • 承認または却下が可能な状態である
  • 期限切れになっている。つまり、もう承認も却下もできない
  • 同じタスク定義から新しい期日で新規タスクとして更新されている
有効期限ポリシーの更新を選択した場合は、タスクが期限切れ時に自動更新される回数を構成できます。デフォルト値は3で、最大値は99です。ビジネス管理者は、「タスクの詳細」ページで「更新」ボタンをクリックすることで、期限切れのタスクを手動で更新できます。このアクションは、タスクの自動更新回数に達している場合に役立ちます。
アクションは、次の2つの新しいイベントに基づいて構成できます。
  1. 期限切れ前: タスク期日前に発生するアクションの場合。
  2. 失効: タスク期日より後に発生するアクションの場合。

新しいAPI

apex_approvalパッケージには、次の新しいAPIがあります。
  • apex_approval.request_more_information(): タスクの実際の所有者が、タスク・イニシエータからさらに情報を入手するために使用します。
  • apex_approval.submit_information(): タスク・イニシエータが、タスクの実際の所有者にさらに情報を送信するために使用します。
  • apex_approval.set_due(): タスク・イニシエータまたはビジネス管理者が、タスクの期日を設定または更新するために使用します。
  • apex_approval.add_to_history(): アクションの実行時にタスク履歴にカスタム・メッセージを記録するために、タスク定義のPL/SQLコードで使用します。
  • apex_approval.renew_task(): ビジネス管理者が、期限切れのタスクを更新するために使用します。
  • apex_approval.handle_task_deadlines(): 22.2では、バックグラウンド・ジョブで、この作業が1時間ごとに実行されます。開発者は、このAPIを使用して、タスク有効期限ポリシーや、「期限切れ前」および「失効」タスク・アクションをテストできます。

3.5 ページ・アイテムのセッション・ステートのデータ型: CLOB

このリリースより前は、ページ・アイテムでのセッション・ステートの暗黙的データ型はVARCHAR2でした。つまり、画面にレンダリングされ、送信、計算および検証される値は文字列であり、データベース構成に応じて長さが4kまたは32kバイトに制限されていました。APEX 22.2では、ページ・アイテムとセッション・ステートの内部インフラストラクチャは、様々なデータ型をサポートするように作り替えられています。追加でサポートされるようになった1つ目のデータ型はCLOBです。

データ型の設定

データ型CLOBは、次のアイテム・タイプで使用できるようになりました。
  • テキスト領域
  • 表示のみ
  • 非表示
  • リッチ・テキスト・エディタ
  • Markdownエディタ
これらのアイテムの場合は、新しい属性グループ「セッション・ステート」の下で、「データ型」選択リストにVARCHAR2 (デフォルト)およびCLOBが移入されるようになりました。データ型をCLOBに設定するということは、次のことを意味します。
  • そのアイテムのソースおよび計算により、CLOB値の評価を処理できます。
  • そのアイテムでCLOB値を表示、送信および検証できます。
  • PL/SQLコードにおいて使用される、そのアイテムのバインド変数のデータ型はCLOBです。
  • Vファンクションの制限事項により、アイテムの値をプログラムで読み取るには、apex_session_state.get_clob(<item name>)を使用する必要があります。

対話グリッドの互換性

セッション・ステートでCLOBデータ型がサポートされている5つのアイテム・タイプを、対話グリッド列として使用することもできます。なお、この組合せが許可されないエッジ・ケースがいくつかあります(「主キー」列または「マスター・ディテール」列に対するCLOBの設定など)。1ページに多数の大きいCLOB値をレンダリングすることはお薦めしません。それにより、ブラウザでパフォーマンスの問題が発生する可能性があるためです。複数のCLOB列の使用や、ページタイプのページ区切りの使用は避けることをお薦めします。

APEX_SESSION_STATE

新しいAPEX_SESSION_STATEパブリック・パッケージは、セッション・ステートに関連する操作を扱う中心的パッケージです。詳細は、Oracle APEX APIリファレンスAPEX_SESSION_STATEを参照してください。

プラグインのサポート

アイテムタイプのプラグインでも、この新しいインフラストラクチャを選択できます。ページ・デザイナで「データ型」属性を表示するには、開発者が、そのアイテムに対して、新しい「セッション・ステートはCLOBをサポートします」標準属性を選択する必要があります。また、レンダリングおよび検証のコールバック・コードが、CLOB値をサポートするように構成されている必要があります。次のAPIの変更点により、これが容易になりました。

パッケージAPEX_PLUGIN:
type t_item is record (
    ...
    data_type               varchar2(32767),                -- DEPRECATED
    source_data_type        apex_exec.t_data_type,          -- NEW
    session_state_data_type apex_session_state.t_data_type, -- NEW
    ...
    );

type t_item_render_param is record (
    ...
    value                   varchar2(32767),                -- LEGACY
    session_state_value     apex_session_state.t_value,     -- NEW
    ...
    );

type t_item_validation_param is record (
    value                   varchar2(32767),                -- LEGACY
    session_state_value     apex_session_state.t_value      -- NEW
    );
パッケージAPEX_PLUGIN_UTIL:
-- NEW: Overloaded version of print_escaped_value
procedure print_escaped_value (
    p_value in apex_session_state.t_value );

-- NEW: Overloaded version of print_hidden
procedure print_hidden (
    p_item_name  in varchar2,
    p_value      in apex_session_state.t_value,
    p_id_postfix in varchar2 defaultnull,
    p_classes    in varchar2 defaultnull );

-- NEW: Overloaded version of print_display_only
procedure print_display_only (
    p_item             in apex_session_state.t_item,
    p_display_value    in apex_session_state.t_value,
    p_show_line_breaks in boolean,
    p_escape           in booleandefaultnull,
    p_id_postfix       in varchar2 default'_DISPLAY',
    p_show_icon        in booleandefaulttrue );
従来のt_item_render_param.valueではなくt_item_render_param.session_state_valueを参照し、APEX_PLUGIN_UTIL内の新しいユーティリティ(様々なデータ型に対応している)を使用することをお薦めします。

移行

既存のすべてのアイテムは、セッション・ステートのデータ型がVARCHAR2に移行されます。既存のアイテムはデフォルトではCLOBに設定されていないため、既存のアイテムを手動で切り替える必要があります。対話グリッドまたはフォーム・リージョンの一部である新規作成したアイテムは、ページ・デザイナで作成した場合でも「ページの作成」ウィザードで作成した場合でも、ソース・データ型がCLOBならCLOBに設定されます。

その他の注意事項と制限事項

CLOBデータ型に関する制限事項を次に示します。
  • この機能は、アプリケーション・アイテムではなくページ・アイテムにのみ適用されます。アプリケーション・アイテムは、引き続きVARCHAR2のみとなります。
  • 対話グリッド列またはフォーム・リージョン・アイテムでセッション・ステートのデータ型としてCLOBを使用する場合は、ソース・データ型もCLOBである必要があります。
  • セッション・ステートのデータ型がCLOBであるアイテムは、サーバーでの標準的な置換文字列構文である(&ITEM_NAME.)を介して参照できません。これにより、ランタイム・エラーが発生します。CLOBアイテムを表示するには、各ページ・アイテムを読取り専用モードで使用するか表示専用アイテムを使用します。「動的コンテンツ」リージョンでプログラムによってアイテムをレンダリングすることもできます。クライアントでは(たとえば、テンプレート・ディレクティブで)、CLOBデータ型に関する標準的な置換文字列構文を使用できます。
  • 「値の設定」動的アクション内では、「タイプの設定」の「PL/SQL式」および「PL/SQLファンクション本体」を使用してCLOBを返すことはできません。回避策は、「タイプの設定」の「SQL文」の使用、または新しい値をアイテムに直接割り当てて「戻すアイテム」でそのアイテムを指定することによる「サーバー側のコードを実行」動的アクションの使用です。
  • 対話グリッドでは、CLOB値はダウンロードできません。

3.6 日付ピッカー

新しい日付ピッカーはAPEX用にゼロから構築されており、そのユーザー・エクスペリエンスは合理化され、より速く、使いやすく、軽量になっています。

今日ボタン

「今日」ボタンを使用すると、今日の日付を簡単に選択できます。このボタンは、「コンポーネント設定」または「アイテム属性」から簡単に有効にできます。

動作を簡単に制御

HTML属性を使用して、複雑なJavaScriptコールを使用する必要なくクライアント側での日付ピッカーの動作を変更します。

高速で使いやすい

新しい日付ピッカーは、ロードがより速くなり、ユーザーの操作に対する応答がより速くなっています。また、アクセシビリティのガイドラインに合わせて構築されています。

3.7 クラシック・レポートと対話モード・レポートでのテンプレート・ディレクティブのサポート

APEXでは、クラシック・レポート内と対話モード・レポート内のHTML式がある列でテンプレート・ディレクティブがサポートされるようになりました。

3.8 「数値」ページ・アイテムの機能拡張

「数値」ページ・アイテムで新しい属性「仮想キーボード」を使用できるようになりました。この属性を使用すると、「数値」ページ・アイテムの編集時にモバイル・デバイスで使用する仮想キーボードのタイプを構成できます。
  • テキスト: 通常の英数字キーボード。
  • 数値: 数値のみのキーボード。このオプションは、金額、PIN、郵便番号、CC番号などを入力する際に役立ちます。
  • 小数: 小数キーがさらに追加されている、数値のみのキーボード。
APEXでは、新しい数値フィールドが、右揃えではなくデフォルトの左揃えで作成されるようになりました。その配置はいつでも変更できます。

3.9 ベクターベースのマップのサポート

APEXでは、マップ・リージョンでベクターベースのマップのタイルがサポートされるようになりました。次の3つのレイヤーを使用できます。
  • OpenStreetMapポジトロン
  • OpenStreetMapダーク
  • OpenStreetMapブライト
新しいアプリケーションでは、デフォルトでベクター・レイヤーが使用されます。既存のアプリケーションでは引き続きラスター・レイヤーが使用されますが、「共有コンポーネント」、「コンポーネント設定」、「マップ」を編集することで、ベクター・レイヤーを使用するように変更できます。

3.10 プログレッシブWebアプリケーションの機能拡張

プログレッシブWebアプリケーション(PWA)機能に新しい機能があります。

PWA機能の検出

APEXでは、機能検出の使用によって、PWAがユーザーのブラウザまたはデバイスでサポートされているかどうかが自動的に判定されるようになり、PWAがサポートされている場合のみ「アプリケーションのインストール」ボタンが表示されるようになりました。これにより、APEXで、ブラウザやデバイスでPWAをサポートしないことを選択した場合にPWAがプッシュされなくなります。

PWAのスクリーンショット

アプリケーションのスクリーンショットを追加できるようになりました。APEXで、プログレッシブWebアプリケーションのインストールをユーザーに求めるときにそれらのスクリーンショットが使用されます。こつは、すべてのスクリーンショットの縦横比を同じにすることです。

PWAのショートカット

ユーザーは、PWAのインストール後、次のように、PWAショートカットを使用してアプリケーションの特定のページにすばやく移動できます。
  • タッチ対応デバイスの場合: ホーム画面上でそのアプリケーションのアイコンを長押しします
  • その他のデバイスの場合: タスク・バーでそのアプリケーションのアイコンを右クリックします。
アプリケーションでPWAショートカットを有効にするには、「セッションを再結合」も有効にする必要があります。

新しい動的アクション

PWA用の次の新しい動的アクションがあります。
  • 現在の位置の取得: デバイスでその現在位置が返されるようにします。次の3つのオプションから選択します。
    1. GeoJSONを文字列としてページ・アイテムに返します。
    2. 緯度と経度を2つの異なるページ・アイテムに返します。
    3. JavaScript関数で使用する、完全なジオロケーション位置オブジェクトを取得します。
  • 共有: そのアプリケーションの現在のページ、URLまたはファイルを他のアプリケーションと共有します。
    • 1つのファイルまたは複数のファイルを、静的に定義するかSQL問合せを実行することで共有できます。

宣言型メタ・タグ

公開されているAPEXページのメタ・タグをページ・デザイナから直接定義できるようになりました。これを新しい「共有」動的アクションと組み合せてソーシャル・メディアにページ・プレビューを表示します。メタ・タグを使用すると、WebアプリケーションのSEOスコアを向上させることもできます。

新しいパブリック・ビュー

PWA機能には、次の新しいパブリック・ビューがあります。
  • APEX_APPL_PWA_SHORTCUTS
  • APEX_APPL_PWA_SCREENSHOTS
  • APEX_APPL_PAGE_META_TAGS

3.11 動的アクションのアクションのネーミング

ページ・デザイナでの自己ドキュメント化の改善のために、動的アクションのアクションにカスタム説明を指定して名前を付けることができるようになりました。

3.12 リージョンのランドマーク・サポート

ランドマークにより、スクリーン・リーダーのユーザーがWebページの構造を把握できるようにする方法を再定義します。APEXでの以前のサポートを基に、リージョンで、それらをどのようにランドマークとして表示するかをすべて制御できるようになりました。リージョンでは、テンプレートのデフォルトが使用されるか、ページ・レベルでそのランドマークが上書きされます。

開発者ツールバーに、「ランドマークの表示」「見出しの表示」のオプションが含まれるようになりました。

3.13 「デバウンス」および「スロットル」動的アクション

「動的アクション」の「実行」の「タイプ」、「時間」および「即時」プロパティを設定することにより、次のアクション実行タイミングを制御できるようになりました。
  • デバウンス: イベントが最後に発生した時点から、指定された遅延時間が経過した後に1回実行される、遅延ありのアクションです。
  • スロットル: すぐに実行されるアクションであり、その後、そのイベントが発生し続ける場合は、指定された間隔で実行されます。

デバウンスされたアクションをすぐに実行することも、スロットルされたアクションを遅延ありで実行することもできます。

3.14 更新されたリッチ・テキスト・エディタ

「リッチ・テキスト・エディタ」ページに、次の2つの新しい宣言型属性があります。
  1. 「ツールバー・スタイル」では、「オーバーフロー・メニュー」「複数行」を選択できます。
    • オーバーフロー・メニュー: このツールバーでは、1行で複数のアイテムが表示されます。ツールバーの幅に収まらないアイテムはあふれてポップアップ・メニューに表示されます。
    • 複数行: このツールバーでは、CKEditor4での動作と同様に、複数行でアイテムが表示されます。
  2. カスタムHTMLの許可: 一般的HTMLサポートとソース編集のCKEditor5プラグインが有効になります。これらのプラグインを併用すると、インラインで編集できるカスタムHTMLが許可されることで、CKEditor4とCKEditor5との差をなくすのに役立ちます。

    ノート:

    CKEditor4で生成されたコンテンツとの高度な併用および互換性のためには、この属性を無効のままにすることをお薦めします。

3.15 「ドロワー」モーダル・ダイアログ・テンプレート

最新の「ユニバーサル・テーマ」には、「ドロワー」ダイアログ・テンプレートが含まれています。このテンプレートは、ページ・モードが「モーダル・ダイアログ」である場合に選択できます。

ドロワーとは、画面の側面から引き出すオーバーレイ・ウィンドウです。ドロワーは、ユーザーがそれを使用し終えて閉じるまで、アクティブであり、フォーカスが設定されたままになります。ドロワーがアクティブである間は、ドロワーを閉じるまで、ユーザーが残りのページを使用できません。

「アプリケーションの作成」ウィザードで、デフォルトで「フォーム」ページが「ドロワー」として作成されるようになりました。アプリケーション・テーマに「ドロワー」ページ・テンプレートが含まれている場合は、「ページの作成」ウィザードで、デフォルトで「フォーム・ページ・モード」が「ドロワー」になります。

3.16 更新された「グローバル検索」(「スポットライト検索」)

「グローバル検索」(「スポットライト検索」)が更新されました。「グローバル検索」で次の内容がサポートされるようになりました。
  • ページ名およびページ別名での検索
  • アプリケーション別名でのアプリケーション内検索。アプリケーション内検索では、アプリケーションのIDまたは別名、およびページのID、名前または別名の間にコロン(:)かダッシュ()を使用します。

3.17 JavaScript APIの更新

新規または変更されたファンクション、メソッドおよびイベント

このリリースに含まれている新規または変更されたファンクション、メソッドおよびイベント:
  • 新しいファンクションapex.util.throttle
  • 新しいパラメータpImmediateapex.util.debounceに追加されました
  • 新しいパラメータpIgnoreUnsavedChangesapex.navigation.redirectに追加されました
  • 新しいモデル・イベントdestroyおよびinstanceRename
  • メソッドmodel.clearDataでブールが返されるようになりました
  • 新しいmapRegionプロパティであるuseVectorTileLayers
  • 一部のmapRegionメソッドで、パラメータ名pFeatIdpFeatureIdに、pFeatpFeatureに変更されました

その他の変更点

このリリースに含まれているその他のAPIの変更点:
  • 「JavaScript初期化コード」という属性名が「初期化JavaScriptファンクション」に変更されています
  • 次のことについての説明が改善されました:
    • apex.locale.toNumberでどのように精度損失が処理されるか
    • apex.message.showPageSuccess
    • 多数のapex.pwaファンクション
    • 多数のmapRegionメソッド
    • itemインタフェース
    • apex.pwa.isInstallable
    • apex.pwa.openInstallDialog
  • JavaScript APIドキュメントに、他にも様々な軽度の修正や改善があります

3.18 PL/SQL APIの更新

APEX_ESCAPEの新機能

APEX_ESCAPEには次の新機能があります。
  • csvでは、CSVファイルで出力するために、VARCHAR2内またはCLOB内の特殊文字がエスケープされます。
  • striphtmlでは、VARCHAR2またはCLOBからHTMLタグが削除されます。
  • CLOBは、次のすべてにわたり十分にサポートされています。
    • html_clob
    • html_allowlist_clob
    • html_attribute_clob
    • is_literal_clob
    • json_clob

APEX_LDAPでの資格証明ストアのサポート

APEX_LDAP APIで、ユーザー名とパスワードのかわりに、新しいp_credential_static_idパラメータがサポートされるようになりました。資格証明をパッケージ内でハードコーディングすることや、それらを他の安全でない方法で格納することを避けるために、このパラメータを使用します。これで、資格証明をアプリケーション・ビルダーの「ワークスペース・ユーティリティ」の下の「Web資格証明」に格納できるようになりました。

その他の更新

APEX_THEME APIには、disable_user_styleenable_user_styleの新しい例があります。

3.19 JavaScriptライブラリのアップグレード

  • CKEditor 5.35.x
  • CSSO 5.0.3
  • DOMPurify 2.3.8
  • Font APEX 2.2.1
  • FullCalendar 5.11.2
  • JavaScript Extension Toolkit (JET) 12.1.3
  • jQuery 3.6.0
  • jQuery Migrate 3.4.0
  • jQuery UI 1.13.2 (カスタム・バンドル)
  • Less JS 4.1.3
  • MarkedJS 4.0.17
  • prism.js 1.28.0
  • MapLibre 2.1.9
  • Terser 5.14.1