feat(common): use jq for JSON response filtering (#5703)
Co-authored-by: James George <25279263+jamesgeorge007@users.noreply.github.com>
This commit is contained in:
parent
bbb7fdf819
commit
bdc2d33f50
34 changed files with 94 additions and 104 deletions
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Reaksie liggaam",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "Opskrifte",
|
||||
"html": "HTML",
|
||||
"image": "Beeld",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "صوت",
|
||||
"body": "Body",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "Headers",
|
||||
"html": "HTML",
|
||||
"image": "صورة",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Cos de resposta",
|
||||
"filter_response_body": "Filtrar el cos de la resposta JSON (utilitza la sintaxi JSONPath)",
|
||||
"filter_response_body": "Filtrar el cos de la resposta JSON (utilitza la sintaxi jq)",
|
||||
"headers": "Capçaleres",
|
||||
"html": "HTML",
|
||||
"image": "Imatge",
|
||||
|
|
|
|||
|
|
@ -1182,7 +1182,7 @@
|
|||
"body": "响应体",
|
||||
"duplicated": "响应重名",
|
||||
"duplicate_name_error": "有同名的响应已存在",
|
||||
"filter_response_body": "筛选JSON响应本体(使用JSONPath语法)",
|
||||
"filter_response_body": "筛选JSON响应本体(使用jq语法)",
|
||||
"headers": "响应头",
|
||||
"request_headers": "请求头",
|
||||
"html": "HTML",
|
||||
|
|
|
|||
|
|
@ -625,7 +625,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Tělo odpovědi",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "Záhlaví",
|
||||
"html": "HTML",
|
||||
"image": "Obrázek",
|
||||
|
|
|
|||
|
|
@ -620,7 +620,7 @@
|
|||
"response": {
|
||||
"audio": "Lyd",
|
||||
"body": "Svarbesked",
|
||||
"filter_response_body": "Filtrer JSON-svarbesked (bruger JSONPath-syntaks)",
|
||||
"filter_response_body": "Filtrer JSON-svarbesked (bruger jq-syntaks)",
|
||||
"headers": "Headers",
|
||||
"html": "HTML",
|
||||
"image": "Billede",
|
||||
|
|
|
|||
|
|
@ -727,7 +727,7 @@
|
|||
"body": "Antworttext",
|
||||
"duplicated": "Antwort dupliziert",
|
||||
"duplicate_name_error": "Antwort mit demselben Namen existiert bereits",
|
||||
"filter_response_body": "JSON-Antwortkörper filtern (verwendet JSONPath-Syntax)",
|
||||
"filter_response_body": "JSON-Antwortkörper filtern (verwendet jq-Syntax)",
|
||||
"headers": "Header",
|
||||
"html": "HTML",
|
||||
"image": "Bild",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Σώμα απόκρισης",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "Κεφαλίδες",
|
||||
"html": "HTML",
|
||||
"image": "Εικόνα",
|
||||
|
|
|
|||
|
|
@ -1202,7 +1202,7 @@
|
|||
"body": "Response Body",
|
||||
"duplicated": "Response duplicated",
|
||||
"duplicate_name_error": "Same name response already exists",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "Headers",
|
||||
"request_headers": "Request Headers",
|
||||
"html": "HTML",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Cuerpo de respuesta",
|
||||
"filter_response_body": "Filtrar el cuerpo de la respuesta JSON (utiliza la sintaxis JSONPath)",
|
||||
"filter_response_body": "Filtrar el cuerpo de la respuesta JSON (utiliza la sintaxis jq)",
|
||||
"headers": "Encabezados",
|
||||
"html": "HTML",
|
||||
"image": "Imagen",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Vastauselin",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "Otsikot",
|
||||
"html": "HTML",
|
||||
"image": "Kuva",
|
||||
|
|
|
|||
|
|
@ -930,7 +930,7 @@
|
|||
"body": "Coprs de la réponse",
|
||||
"duplicated": "Réponse dupliquée",
|
||||
"duplicate_name_error": "Une réponse avec le même nom existe déjà",
|
||||
"filter_response_body": "Filtrer le corps de la réponse JSON (utilise la syntaxe JSONPath)",
|
||||
"filter_response_body": "Filtrer le corps de la réponse JSON (utilise la syntaxe jq)",
|
||||
"headers": "En-têtes",
|
||||
"request_headers": "En-têtes de requête",
|
||||
"html": "HTML",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "גוף תגובה",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "כותרות",
|
||||
"html": "HTML",
|
||||
"image": "תמונה",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Hang",
|
||||
"body": "Válasz törzse",
|
||||
"filter_response_body": "JSON-válasz törzsének szűrése (JSONPath szintaxist használ)",
|
||||
"filter_response_body": "JSON-válasz törzsének szűrése (jq szintaxist használ)",
|
||||
"headers": "Fejlécek",
|
||||
"html": "HTML",
|
||||
"image": "Kép",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Response Body",
|
||||
"filter_response_body": "Filter body respons JSON (menggunakan sintaks JSONPath)",
|
||||
"filter_response_body": "Filter body respons JSON (menggunakan sintaks jq)",
|
||||
"headers": "Headers",
|
||||
"html": "HTML",
|
||||
"image": "Gambar",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Corpo della risposta",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "Intestazioni",
|
||||
"html": "HTML",
|
||||
"image": "Immagine",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "レスポンスボディ",
|
||||
"filter_response_body": "JSONレスポンスボディをフィルタ (JSONPathシンタックスを使用)",
|
||||
"filter_response_body": "JSONレスポンスボディをフィルタ (jqシンタックスを使用)",
|
||||
"headers": "ヘッダー",
|
||||
"html": "HTML",
|
||||
"image": "画像",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "응답 본문",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "헤더",
|
||||
"html": "HTML",
|
||||
"image": "이미지",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Reactie inhoud",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "Headers",
|
||||
"html": "HTML",
|
||||
"image": "Afbeelding",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Svarkropp",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "Overskrifter",
|
||||
"html": "HTML",
|
||||
"image": "Bilde",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Ciało odpowiedzi",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "Nagłówki",
|
||||
"html": "HTML",
|
||||
"image": "Obraz",
|
||||
|
|
|
|||
|
|
@ -727,7 +727,7 @@
|
|||
"body": "Corpo de Resposta",
|
||||
"duplicated": "Resposta duplicada",
|
||||
"duplicate_name_error": "Já existe uma resposta com o mesmo nome",
|
||||
"filter_response_body": "Filtar corpo de resposta JSON (utiliza sintaxe JSONPath)",
|
||||
"filter_response_body": "Filtar corpo de resposta JSON (utiliza sintaxe jq)",
|
||||
"headers": "Cabeçalhos",
|
||||
"request_headers": "Cabeçalhos de Requisição",
|
||||
"html": "HTML",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Corpo de Resposta",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "Cabeçalhos",
|
||||
"html": "HTML",
|
||||
"image": "Imagem",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Corpul de răspuns",
|
||||
"filter_response_body": "Filtrează corpul răspunsului JSON (folosește sintaxa JSONPath)",
|
||||
"filter_response_body": "Filtrează corpul răspunsului JSON (folosește sintaxa jq)",
|
||||
"headers": "Anteturi",
|
||||
"html": "HTML",
|
||||
"image": "Imagine",
|
||||
|
|
|
|||
|
|
@ -618,7 +618,7 @@
|
|||
"response": {
|
||||
"audio": "Аудио",
|
||||
"body": "Тело ответа",
|
||||
"filter_response_body": "Отфильтровать ответ в формате JSON (используется синтаксис JSONPath)",
|
||||
"filter_response_body": "Отфильтровать ответ в формате JSON (используется синтаксис jq)",
|
||||
"headers": "Заголовки",
|
||||
"html": "HTML",
|
||||
"image": "Изображение",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Тело за одговор",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "Заглавља",
|
||||
"html": "ХТМЛ",
|
||||
"image": "Слика",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Svarskommitté",
|
||||
"filter_response_body": "Filter JSON response body (uses JSONPath syntax)",
|
||||
"filter_response_body": "Filter JSON response body (uses jq syntax)",
|
||||
"headers": "Rubriker",
|
||||
"html": "HTML",
|
||||
"image": "Bild",
|
||||
|
|
|
|||
|
|
@ -618,7 +618,7 @@
|
|||
"response": {
|
||||
"audio": "Ses",
|
||||
"body": "Yanıt gövdesi",
|
||||
"filter_response_body": "JSON yanıt gövdesini filtrele (JSONPath sözdizimi kullanır)",
|
||||
"filter_response_body": "JSON yanıt gövdesini filtrele (jq sözdizimi kullanır)",
|
||||
"headers": "Başlıklar",
|
||||
"html": "HTML",
|
||||
"image": "Resim",
|
||||
|
|
|
|||
|
|
@ -639,7 +639,7 @@
|
|||
"response": {
|
||||
"audio": "音訊",
|
||||
"body": "回應本體",
|
||||
"filter_response_body": "篩選 JSON 回應本體 (使用 JSONPath 語法)",
|
||||
"filter_response_body": "篩選 JSON 回應本體 (使用 jq 語法)",
|
||||
"headers": "回應標頭",
|
||||
"html": "HTML",
|
||||
"image": "影像",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Audio",
|
||||
"body": "Орган реагування",
|
||||
"filter_response_body": "Фільтр тіла відповідей JSON (використовує синтаксис JSONPath)",
|
||||
"filter_response_body": "Фільтр тіла відповідей JSON (використовує синтаксис jq)",
|
||||
"headers": "Заголовки",
|
||||
"html": "HTML",
|
||||
"image": "Зображення",
|
||||
|
|
|
|||
|
|
@ -623,7 +623,7 @@
|
|||
"response": {
|
||||
"audio": "Âm thanh",
|
||||
"body": "Nội dung Phản hồi",
|
||||
"filter_response_body": "Lọc nội dung phản hồi JSON (sử dụng cú pháp JSONPath)",
|
||||
"filter_response_body": "Lọc nội dung phản hồi JSON (sử dụng cú pháp jq)",
|
||||
"headers": "Headers",
|
||||
"html": "HTML",
|
||||
"image": "Hình ảnh",
|
||||
|
|
|
|||
|
|
@ -76,10 +76,10 @@
|
|||
"highlightjs-curl": "1.3.0",
|
||||
"insomnia-importers": "3.6.0",
|
||||
"io-ts": "2.2.22",
|
||||
"jq-wasm": "1.1.0-jq-1.8.1",
|
||||
"js-md5": "0.8.3",
|
||||
"js-yaml": "4.1.1",
|
||||
"jsonc-parser": "3.3.1",
|
||||
"jsonpath-plus": "10.3.0",
|
||||
"lodash-es": "4.17.22",
|
||||
"lossless-json": "4.3.0",
|
||||
"markdown-it": "14.1.0",
|
||||
|
|
|
|||
|
|
@ -118,23 +118,30 @@
|
|||
</span>
|
||||
<div
|
||||
v-if="filterResponseError"
|
||||
class="flex items-center justify-center rounded px-2 py-1 text-tiny text-accentContrast"
|
||||
v-tippy="{
|
||||
theme: 'tooltip',
|
||||
content: filterResponseError.error,
|
||||
placement: 'bottom',
|
||||
}"
|
||||
role="alert"
|
||||
aria-live="assertive"
|
||||
class="flex max-w-[10rem] cursor-help items-center justify-center rounded px-2 py-1 text-tiny text-accentContrast sm:max-w-[16rem]"
|
||||
:class="{
|
||||
'bg-red-500':
|
||||
filterResponseError.type === 'JSON_PARSE_FAILED' ||
|
||||
filterResponseError.type === 'JSON_PATH_QUERY_ERROR',
|
||||
filterResponseError.type === 'JSON_QUERY_FAILED',
|
||||
'bg-amber-500': filterResponseError.type === 'RESPONSE_EMPTY',
|
||||
}"
|
||||
>
|
||||
<icon-lucide-info class="svg-icons mr-1.5" />
|
||||
<span>{{ filterResponseError.error }}</span>
|
||||
<icon-lucide-info class="svg-icons mr-1.5 flex-shrink-0" />
|
||||
<span class="truncate">{{ filterResponseError.error }}</span>
|
||||
</div>
|
||||
<HoppButtonSecondary
|
||||
v-if="showResponse"
|
||||
v-tippy="{ theme: 'tooltip' }"
|
||||
:title="t('app.wiki')"
|
||||
:icon="IconHelpCircle"
|
||||
to="https://github.com/JSONPath-Plus/JSONPath"
|
||||
to="https://jqlang.org/manual/"
|
||||
blank
|
||||
/>
|
||||
</div>
|
||||
|
|
@ -265,7 +272,8 @@ import * as O from "fp-ts/Option"
|
|||
import * as E from "fp-ts/Either"
|
||||
import { pipe } from "fp-ts/function"
|
||||
import { computed, ref, reactive } from "vue"
|
||||
import { JSONPath } from "jsonpath-plus"
|
||||
import { computedAsync, refDebounced } from "@vueuse/core"
|
||||
import * as jq from "jq-wasm"
|
||||
import { useCodemirror } from "@composables/codemirror"
|
||||
import { HoppRESTResponse } from "~/helpers/types/HoppRESTResponse"
|
||||
import jsonParse, { JSONObjectMember, JSONValue } from "~/helpers/jsonParse"
|
||||
|
|
@ -326,10 +334,11 @@ const isHttpResponse = computed(() => {
|
|||
|
||||
const toggleFilter = ref(false)
|
||||
const filterQueryText = ref("")
|
||||
const debouncedFilterQuery = refDebounced(filterQueryText, 300)
|
||||
|
||||
type BodyParseError =
|
||||
| { type: "JSON_PARSE_FAILED" }
|
||||
| { type: "JSON_PATH_QUERY_FAILED"; error: Error }
|
||||
| { type: "JSON_QUERY_FAILED"; error: Error }
|
||||
|
||||
const responseJsonObject = computed(() => {
|
||||
if (isHttpResponse.value) {
|
||||
|
|
@ -362,28 +371,41 @@ const responseName = computed(() => {
|
|||
|
||||
const { responseBodyText } = useResponseBody(props.response)
|
||||
|
||||
const jsonResponseBodyText = computed(() => {
|
||||
if (filterQueryText.value.length > 0 && responseJsonObject.value) {
|
||||
return pipe(
|
||||
responseJsonObject.value,
|
||||
E.chain((parsedJSON) =>
|
||||
E.tryCatch(
|
||||
() =>
|
||||
JSONPath({
|
||||
path: filterQueryText.value,
|
||||
json: JSON.parse(LJSON.stringify(parsedJSON as any) || "{}"),
|
||||
}),
|
||||
(err): BodyParseError => ({
|
||||
type: "JSON_PATH_QUERY_FAILED",
|
||||
error: err as Error,
|
||||
})
|
||||
const jsonResponseBodyText = computedAsync(
|
||||
async (): Promise<E.Either<BodyParseError, string | object>> => {
|
||||
if (debouncedFilterQuery.value.length > 0 && responseJsonObject.value) {
|
||||
if (E.isLeft(responseJsonObject.value)) {
|
||||
return responseJsonObject.value
|
||||
}
|
||||
|
||||
try {
|
||||
const input = JSON.parse(
|
||||
LJSON.stringify(responseJsonObject.value.right as any) || "{}"
|
||||
)
|
||||
),
|
||||
E.map((result: any) => result as string | object)
|
||||
)
|
||||
}
|
||||
return E.right(responseBodyText.value)
|
||||
})
|
||||
const { exitCode, stdout, stderr } = await jq.raw(
|
||||
input,
|
||||
debouncedFilterQuery.value
|
||||
)
|
||||
|
||||
if (exitCode !== 0) {
|
||||
// Extract first line of jq error for user-friendly message
|
||||
const errorMessage = stderr?.split("\n")[0]?.trim() || "Syntax Error"
|
||||
throw new Error(errorMessage)
|
||||
}
|
||||
|
||||
return E.right(stdout as string | object)
|
||||
} catch (err) {
|
||||
return E.left({
|
||||
type: "JSON_QUERY_FAILED",
|
||||
error: err as Error,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return E.right(responseBodyText.value)
|
||||
},
|
||||
E.right(responseBodyText.value)
|
||||
)
|
||||
|
||||
const jsonBodyText = computed(() => {
|
||||
const { responseBodyText } = useResponseBody(
|
||||
|
|
@ -395,7 +417,7 @@ const jsonBodyText = computed(() => {
|
|||
E.getOrElse(() => responseBodyText.value)
|
||||
)
|
||||
|
||||
// If the rawValue is already an object (from JSONPath filtering), stringify it directly
|
||||
// If the rawValue is already an object (from JSON filtering), stringify it directly
|
||||
if (typeof rawValue === "object" && rawValue !== null) {
|
||||
return JSON.stringify(rawValue, null, 2)
|
||||
}
|
||||
|
|
@ -404,7 +426,7 @@ const jsonBodyText = computed(() => {
|
|||
const stringValue = rawValue as string
|
||||
|
||||
// If we're filtering, the string should already be clean JSON (no lossless numbers)
|
||||
if (filterQueryText.value.length > 0) {
|
||||
if (debouncedFilterQuery.value.length > 0) {
|
||||
return pipe(
|
||||
stringValue,
|
||||
O.tryCatchK(JSON.parse),
|
||||
|
|
@ -436,8 +458,8 @@ const filterResponseError = computed(() =>
|
|||
E.match(
|
||||
(e) => {
|
||||
switch (e.type) {
|
||||
case "JSON_PATH_QUERY_FAILED":
|
||||
return { type: "JSON_PATH_QUERY_ERROR", error: e.error.message }
|
||||
case "JSON_QUERY_FAILED":
|
||||
return { type: "JSON_QUERY_FAILED", error: e.error.message }
|
||||
case "JSON_PARSE_FAILED":
|
||||
return {
|
||||
type: "JSON_PARSE_FAILED",
|
||||
|
|
|
|||
|
|
@ -644,6 +644,9 @@ importers:
|
|||
io-ts:
|
||||
specifier: 2.2.22
|
||||
version: 2.2.22(fp-ts@2.16.11)
|
||||
jq-wasm:
|
||||
specifier: 1.1.0-jq-1.8.1
|
||||
version: 1.1.0-jq-1.8.1
|
||||
js-md5:
|
||||
specifier: 0.8.3
|
||||
version: 0.8.3
|
||||
|
|
@ -653,9 +656,6 @@ importers:
|
|||
jsonc-parser:
|
||||
specifier: 3.3.1
|
||||
version: 3.3.1
|
||||
jsonpath-plus:
|
||||
specifier: 10.3.0
|
||||
version: 10.3.0
|
||||
lodash-es:
|
||||
specifier: 4.17.22
|
||||
version: 4.17.22
|
||||
|
|
@ -4383,18 +4383,6 @@ packages:
|
|||
'@jsdevtools/ono@7.1.3':
|
||||
resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==}
|
||||
|
||||
'@jsep-plugin/assignment@1.3.0':
|
||||
resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==}
|
||||
engines: {node: '>= 10.16.0'}
|
||||
peerDependencies:
|
||||
jsep: ^0.4.0||^1.0.0
|
||||
|
||||
'@jsep-plugin/regex@1.0.4':
|
||||
resolution: {integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==}
|
||||
engines: {node: '>= 10.16.0'}
|
||||
peerDependencies:
|
||||
jsep: ^0.4.0||^1.0.0
|
||||
|
||||
'@lezer/common@1.3.0':
|
||||
resolution: {integrity: sha512-L9X8uHCYU310o99L3/MpJKYxPzXPOS7S0NmBaM7UO/x2Kb2WbmMLSkfvdr1KxRIFYOpbY0Jhn7CfLSUDzL8arQ==}
|
||||
|
||||
|
|
@ -9362,6 +9350,9 @@ packages:
|
|||
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
jq-wasm@1.1.0-jq-1.8.1:
|
||||
resolution: {integrity: sha512-lWfu34lpDFIygOYcL5TzxhZIApDR9iR5XywcVoyUAZ6jlQrj8HKHOKeCcHgUm2dE9RVdbP3eqNAKGLuj+k4seQ==}
|
||||
|
||||
js-base64@3.7.8:
|
||||
resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==}
|
||||
|
||||
|
|
@ -9391,10 +9382,6 @@ packages:
|
|||
canvas:
|
||||
optional: true
|
||||
|
||||
jsep@1.4.0:
|
||||
resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==}
|
||||
engines: {node: '>= 10.16.0'}
|
||||
|
||||
jsesc@3.1.0:
|
||||
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
|
||||
engines: {node: '>=6'}
|
||||
|
|
@ -9444,11 +9431,6 @@ packages:
|
|||
resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
|
||||
engines: {'0': node >= 0.2.0}
|
||||
|
||||
jsonpath-plus@10.3.0:
|
||||
resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
hasBin: true
|
||||
|
||||
jsonpointer@5.0.1:
|
||||
resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
|
@ -17231,14 +17213,6 @@ snapshots:
|
|||
|
||||
'@jsdevtools/ono@7.1.3': {}
|
||||
|
||||
'@jsep-plugin/assignment@1.3.0(jsep@1.4.0)':
|
||||
dependencies:
|
||||
jsep: 1.4.0
|
||||
|
||||
'@jsep-plugin/regex@1.0.4(jsep@1.4.0)':
|
||||
dependencies:
|
||||
jsep: 1.4.0
|
||||
|
||||
'@lezer/common@1.3.0': {}
|
||||
|
||||
'@lezer/generator@1.8.0':
|
||||
|
|
@ -23215,6 +23189,8 @@ snapshots:
|
|||
|
||||
joycon@3.1.1: {}
|
||||
|
||||
jq-wasm@1.1.0-jq-1.8.1: {}
|
||||
|
||||
js-base64@3.7.8: {}
|
||||
|
||||
js-md5@0.8.3: {}
|
||||
|
|
@ -23260,8 +23236,6 @@ snapshots:
|
|||
- supports-color
|
||||
- utf-8-validate
|
||||
|
||||
jsep@1.4.0: {}
|
||||
|
||||
jsesc@3.1.0: {}
|
||||
|
||||
json-buffer@3.0.1: {}
|
||||
|
|
@ -23302,12 +23276,6 @@ snapshots:
|
|||
|
||||
jsonparse@1.3.1: {}
|
||||
|
||||
jsonpath-plus@10.3.0:
|
||||
dependencies:
|
||||
'@jsep-plugin/assignment': 1.3.0(jsep@1.4.0)
|
||||
'@jsep-plugin/regex': 1.0.4(jsep@1.4.0)
|
||||
jsep: 1.4.0
|
||||
|
||||
jsonpointer@5.0.1: {}
|
||||
|
||||
jsonwebtoken@9.0.2:
|
||||
|
|
|
|||
Loading…
Reference in a new issue