Merge branch 'table-improvements-2' of github.com:Budibase/budibase into conditional-table-colours
This commit is contained in:
commit
2548cd5ff4
|
@ -179,13 +179,6 @@ jobs:
|
||||||
- run: yarn --frozen-lockfile
|
- run: yarn --frozen-lockfile
|
||||||
|
|
||||||
- name: Test server
|
- name: Test server
|
||||||
env:
|
|
||||||
DD_CIVISIBILITY_AGENTLESS_ENABLED: true
|
|
||||||
DD_API_KEY: "${{ secrets.DATADOG_API_KEY }}"
|
|
||||||
DD_SITE: "datadoghq.eu"
|
|
||||||
NODE_OPTIONS: "-r dd-trace/ci/init"
|
|
||||||
DD_ENV: "ci"
|
|
||||||
DD_SERVICE: "budibase/packages/server"
|
|
||||||
run: |
|
run: |
|
||||||
if ${{ env.USE_NX_AFFECTED }}; then
|
if ${{ env.USE_NX_AFFECTED }}; then
|
||||||
yarn test --scope=@budibase/server --since=${{ env.NX_BASE_BRANCH }}
|
yarn test --scope=@budibase/server --since=${{ env.NX_BASE_BRANCH }}
|
||||||
|
|
|
@ -84,6 +84,8 @@
|
||||||
showPopover={drawers.length === 0}
|
showPopover={drawers.length === 0}
|
||||||
clickOutsideOverride={drawers.length > 0}
|
clickOutsideOverride={drawers.length > 0}
|
||||||
maxHeight={600}
|
maxHeight={600}
|
||||||
|
minWidth={360}
|
||||||
|
maxWidth={360}
|
||||||
offset={18}
|
offset={18}
|
||||||
>
|
>
|
||||||
<span class="popover-wrap">
|
<span class="popover-wrap">
|
||||||
|
|
|
@ -99,4 +99,11 @@
|
||||||
);
|
);
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
.type-icon span {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
width: 0;
|
||||||
|
flex: 1 1 auto;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
rows,
|
rows,
|
||||||
focusedRow,
|
focusedRow,
|
||||||
selectedRows,
|
selectedRows,
|
||||||
visibleColumns,
|
scrollableColumns,
|
||||||
scroll,
|
scroll,
|
||||||
isDragging,
|
isDragging,
|
||||||
buttonColumnWidth,
|
buttonColumnWidth,
|
||||||
|
@ -22,12 +22,13 @@
|
||||||
let container
|
let container
|
||||||
|
|
||||||
$: buttons = $props.buttons?.slice(0, 3) || []
|
$: buttons = $props.buttons?.slice(0, 3) || []
|
||||||
$: columnsWidth = $visibleColumns.reduce(
|
$: columnsWidth = $scrollableColumns.reduce(
|
||||||
(total, col) => (total += col.width),
|
(total, col) => (total += col.width),
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
$: end = columnsWidth - 1 - $scroll.left
|
$: columnEnd = columnsWidth - $scroll.left - 1
|
||||||
$: left = Math.min($width - $buttonColumnWidth, end)
|
$: gridEnd = $width - $buttonColumnWidth
|
||||||
|
$: left = Math.min(columnEnd, gridEnd)
|
||||||
|
|
||||||
const handleClick = async (button, row) => {
|
const handleClick = async (button, row) => {
|
||||||
await button.onClick?.(rows.actions.cleanRow(row))
|
await button.onClick?.(rows.actions.cleanRow(row))
|
||||||
|
@ -49,6 +50,7 @@
|
||||||
class="button-column"
|
class="button-column"
|
||||||
style="left:{left}px"
|
style="left:{left}px"
|
||||||
class:hidden={$buttonColumnWidth === 0}
|
class:hidden={$buttonColumnWidth === 0}
|
||||||
|
class:right-border={left !== gridEnd}
|
||||||
>
|
>
|
||||||
<div class="content" on:mouseleave={() => ($hoveredRowId = null)}>
|
<div class="content" on:mouseleave={() => ($hoveredRowId = null)}>
|
||||||
<GridScrollWrapper scrollVertically attachHandlers bind:ref={container}>
|
<GridScrollWrapper scrollVertically attachHandlers bind:ref={container}>
|
||||||
|
@ -134,4 +136,7 @@
|
||||||
.button-column :global(.cell) {
|
.button-column :global(.cell) {
|
||||||
border-left: var(--cell-border);
|
border-left: var(--cell-border);
|
||||||
}
|
}
|
||||||
|
.button-column:not(.right-border) :global(.cell) {
|
||||||
|
border-right-color: transparent;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { derived, writable, get } from "svelte/store"
|
import { derived, writable, get } from "svelte/store"
|
||||||
import { Helpers } from "@budibase/bbui"
|
import { Helpers } from "@budibase/bbui"
|
||||||
import { parseCellID, getCellID } from "../lib/utils"
|
import { parseCellID, getCellID } from "../lib/utils"
|
||||||
|
import { NewRowID } from "../lib/constants"
|
||||||
|
|
||||||
export const createStores = () => {
|
export const createStores = () => {
|
||||||
const clipboard = writable({
|
const clipboard = writable({
|
||||||
|
@ -13,7 +14,8 @@ export const createStores = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const deriveStores = context => {
|
export const deriveStores = context => {
|
||||||
const { clipboard, focusedCellAPI, selectedCellCount, config } = context
|
const { clipboard, focusedCellAPI, selectedCellCount, config, focusedRowId } =
|
||||||
|
context
|
||||||
|
|
||||||
// Derive whether or not we're able to copy
|
// Derive whether or not we're able to copy
|
||||||
const copyAllowed = derived(focusedCellAPI, $focusedCellAPI => {
|
const copyAllowed = derived(focusedCellAPI, $focusedCellAPI => {
|
||||||
|
@ -22,12 +24,19 @@ export const deriveStores = context => {
|
||||||
|
|
||||||
// Derive whether or not we're able to paste
|
// Derive whether or not we're able to paste
|
||||||
const pasteAllowed = derived(
|
const pasteAllowed = derived(
|
||||||
[clipboard, focusedCellAPI, selectedCellCount, config],
|
[clipboard, focusedCellAPI, selectedCellCount, config, focusedRowId],
|
||||||
([$clipboard, $focusedCellAPI, $selectedCellCount, $config]) => {
|
([
|
||||||
|
$clipboard,
|
||||||
|
$focusedCellAPI,
|
||||||
|
$selectedCellCount,
|
||||||
|
$config,
|
||||||
|
$focusedRowId,
|
||||||
|
]) => {
|
||||||
if (
|
if (
|
||||||
$clipboard.value == null ||
|
$clipboard.value == null ||
|
||||||
!$config.canEditRows ||
|
!$config.canEditRows ||
|
||||||
!$focusedCellAPI
|
!$focusedCellAPI ||
|
||||||
|
$focusedRowId === NewRowID
|
||||||
) {
|
) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,7 +99,7 @@
|
||||||
"mysql2": "3.9.8",
|
"mysql2": "3.9.8",
|
||||||
"node-fetch": "2.6.7",
|
"node-fetch": "2.6.7",
|
||||||
"object-sizeof": "2.6.1",
|
"object-sizeof": "2.6.1",
|
||||||
"openai": "^3.2.1",
|
"openai": "^4.52.1",
|
||||||
"openapi-types": "9.3.1",
|
"openapi-types": "9.3.1",
|
||||||
"pg": "8.10.0",
|
"pg": "8.10.0",
|
||||||
"pouchdb": "7.3.0",
|
"pouchdb": "7.3.0",
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { Configuration, OpenAIApi } from "openai"
|
import { OpenAI } from "openai"
|
||||||
|
|
||||||
import {
|
import {
|
||||||
AutomationActionStepId,
|
AutomationActionStepId,
|
||||||
AutomationStepSchema,
|
AutomationStepSchema,
|
||||||
|
@ -75,13 +76,11 @@ export async function run({ inputs }: AutomationStepInput) {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const configuration = new Configuration({
|
const openai = new OpenAI({
|
||||||
apiKey: environment.OPENAI_API_KEY,
|
apiKey: environment.OPENAI_API_KEY,
|
||||||
})
|
})
|
||||||
|
|
||||||
const openai = new OpenAIApi(configuration)
|
const completion = await openai.chat.completions.create({
|
||||||
|
|
||||||
const completion = await openai.createChatCompletion({
|
|
||||||
model: inputs.model,
|
model: inputs.model,
|
||||||
messages: [
|
messages: [
|
||||||
{
|
{
|
||||||
|
@ -90,8 +89,7 @@ export async function run({ inputs }: AutomationStepInput) {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
const response = completion?.choices[0]?.message?.content
|
||||||
const response = completion?.data?.choices[0]?.message?.content
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
response,
|
response,
|
||||||
|
|
|
@ -1,15 +1,13 @@
|
||||||
const setup = require("./utilities")
|
const setup = require("./utilities")
|
||||||
|
|
||||||
import environment from "../../environment"
|
import environment from "../../environment"
|
||||||
import openai from "openai"
|
import { OpenAI } from "openai"
|
||||||
|
|
||||||
jest.mock(
|
jest.mock("openai", () => ({
|
||||||
"openai",
|
OpenAI: jest.fn().mockImplementation(() => ({
|
||||||
jest.fn(() => ({
|
chat: {
|
||||||
Configuration: jest.fn(),
|
completions: {
|
||||||
OpenAIApi: jest.fn(() => ({
|
create: jest.fn(() => ({
|
||||||
createChatCompletion: jest.fn(() => ({
|
|
||||||
data: {
|
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
message: {
|
message: {
|
||||||
|
@ -17,15 +15,13 @@ jest.mock(
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
})),
|
||||||
})),
|
},
|
||||||
})),
|
},
|
||||||
}))
|
})),
|
||||||
)
|
}))
|
||||||
|
|
||||||
const mockedOpenAIApi = openai.OpenAIApi as jest.MockedClass<
|
const mockedOpenAI = OpenAI as jest.MockedClass<typeof OpenAI>
|
||||||
typeof openai.OpenAIApi
|
|
||||||
>
|
|
||||||
|
|
||||||
const OPENAI_PROMPT = "What is the meaning of life?"
|
const OPENAI_PROMPT = "What is the meaning of life?"
|
||||||
|
|
||||||
|
@ -73,14 +69,18 @@ describe("test the openai action", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should present the correct error message when an error is thrown from the createChatCompletion call", async () => {
|
it("should present the correct error message when an error is thrown from the createChatCompletion call", async () => {
|
||||||
mockedOpenAIApi.mockImplementation(
|
mockedOpenAI.mockImplementation(
|
||||||
() =>
|
() =>
|
||||||
({
|
({
|
||||||
createChatCompletion: jest.fn(() => {
|
chat: {
|
||||||
throw new Error(
|
completions: {
|
||||||
"An error occurred while calling createChatCompletion"
|
create: jest.fn(() => {
|
||||||
)
|
throw new Error(
|
||||||
}),
|
"An error occurred while calling createChatCompletion"
|
||||||
|
)
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
},
|
||||||
} as any)
|
} as any)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
56
yarn.lock
56
yarn.lock
|
@ -5911,6 +5911,14 @@
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
form-data "^3.0.0"
|
form-data "^3.0.0"
|
||||||
|
|
||||||
|
"@types/node-fetch@^2.6.4":
|
||||||
|
version "2.6.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24"
|
||||||
|
integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
form-data "^4.0.0"
|
||||||
|
|
||||||
"@types/node@*", "@types/node@>=10.0.0", "@types/node@>=12.12.47", "@types/node@>=13.13.4", "@types/node@>=13.7.0", "@types/node@^20.4.5":
|
"@types/node@*", "@types/node@>=10.0.0", "@types/node@>=12.12.47", "@types/node@>=13.13.4", "@types/node@>=13.7.0", "@types/node@^20.4.5":
|
||||||
version "20.12.10"
|
version "20.12.10"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.10.tgz#8f0c3f12b0f075eee1fe20c1afb417e9765bef76"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.10.tgz#8f0c3f12b0f075eee1fe20c1afb417e9765bef76"
|
||||||
|
@ -7476,7 +7484,7 @@ axios-retry@^3.1.9:
|
||||||
"@babel/runtime" "^7.15.4"
|
"@babel/runtime" "^7.15.4"
|
||||||
is-retry-allowed "^2.2.0"
|
is-retry-allowed "^2.2.0"
|
||||||
|
|
||||||
axios@0.24.0, axios@1.1.3, axios@1.6.3, axios@^0.21.1, axios@^0.26.0, axios@^1.0.0, axios@^1.1.3, axios@^1.4.0, axios@^1.5.0:
|
axios@0.24.0, axios@1.1.3, axios@1.6.3, axios@^0.21.1, axios@^1.0.0, axios@^1.1.3, axios@^1.4.0, axios@^1.5.0:
|
||||||
version "1.6.3"
|
version "1.6.3"
|
||||||
resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.3.tgz#7f50f23b3aa246eff43c54834272346c396613f4"
|
resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.3.tgz#7f50f23b3aa246eff43c54834272346c396613f4"
|
||||||
integrity sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==
|
integrity sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==
|
||||||
|
@ -11480,6 +11488,11 @@ forever-agent@~0.6.1:
|
||||||
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
||||||
integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
|
integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
|
||||||
|
|
||||||
|
form-data-encoder@1.7.2:
|
||||||
|
version "1.7.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040"
|
||||||
|
integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==
|
||||||
|
|
||||||
form-data@4.0.0, form-data@^4.0.0:
|
form-data@4.0.0, form-data@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
|
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
|
||||||
|
@ -11516,6 +11529,14 @@ form-data@~2.3.2:
|
||||||
combined-stream "^1.0.6"
|
combined-stream "^1.0.6"
|
||||||
mime-types "^2.1.12"
|
mime-types "^2.1.12"
|
||||||
|
|
||||||
|
formdata-node@^4.3.2:
|
||||||
|
version "4.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2"
|
||||||
|
integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==
|
||||||
|
dependencies:
|
||||||
|
node-domexception "1.0.0"
|
||||||
|
web-streams-polyfill "4.0.0-beta.3"
|
||||||
|
|
||||||
formidable@^1.1.1:
|
formidable@^1.1.1:
|
||||||
version "1.2.6"
|
version "1.2.6"
|
||||||
resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168"
|
resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168"
|
||||||
|
@ -16262,6 +16283,11 @@ node-addon-api@^6.1.0:
|
||||||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76"
|
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76"
|
||||||
integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==
|
integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==
|
||||||
|
|
||||||
|
node-domexception@1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
|
||||||
|
integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
|
||||||
|
|
||||||
node-fetch@2.6.0, node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9, node-fetch@^2.7.0:
|
node-fetch@2.6.0, node-fetch@2.6.7, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9, node-fetch@^2.7.0:
|
||||||
version "2.6.7"
|
version "2.6.7"
|
||||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
||||||
|
@ -16891,13 +16917,19 @@ open@^8.0.0, open@^8.4.0, open@~8.4.0:
|
||||||
is-docker "^2.1.1"
|
is-docker "^2.1.1"
|
||||||
is-wsl "^2.2.0"
|
is-wsl "^2.2.0"
|
||||||
|
|
||||||
openai@^3.2.1:
|
openai@4.52.1:
|
||||||
version "3.2.1"
|
version "4.52.1"
|
||||||
resolved "https://registry.yarnpkg.com/openai/-/openai-3.2.1.tgz#1fa35bdf979cbde8453b43f2dd3a7d401ee40866"
|
resolved "https://registry.yarnpkg.com/openai/-/openai-4.52.1.tgz#44acc362a844fa2927b0cfa1fb70fb51e388af65"
|
||||||
integrity sha512-762C9BNlJPbjjlWZi4WYK9iM2tAVAv0uUp1UmI34vb0CN5T2mjB/qM6RYBmNKMh/dN9fC+bxqPwWJZUTWW052A==
|
integrity sha512-kv2hevAWZZ3I/vd2t8znGO2rd8wkowncsfcYpo8i+wU9ML+JEcdqiViANXXjWWGjIhajFNixE6gOY1fEgqILAg==
|
||||||
dependencies:
|
dependencies:
|
||||||
axios "^0.26.0"
|
"@types/node" "^18.11.18"
|
||||||
form-data "^4.0.0"
|
"@types/node-fetch" "^2.6.4"
|
||||||
|
abort-controller "^3.0.0"
|
||||||
|
agentkeepalive "^4.2.1"
|
||||||
|
form-data-encoder "1.7.2"
|
||||||
|
formdata-node "^4.3.2"
|
||||||
|
node-fetch "^2.6.7"
|
||||||
|
web-streams-polyfill "^3.2.1"
|
||||||
|
|
||||||
openapi-response-validator@^9.2.0:
|
openapi-response-validator@^9.2.0:
|
||||||
version "9.3.1"
|
version "9.3.1"
|
||||||
|
@ -22334,6 +22366,16 @@ wcwidth@^1.0.0, wcwidth@^1.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
defaults "^1.0.3"
|
defaults "^1.0.3"
|
||||||
|
|
||||||
|
web-streams-polyfill@4.0.0-beta.3:
|
||||||
|
version "4.0.0-beta.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38"
|
||||||
|
integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==
|
||||||
|
|
||||||
|
web-streams-polyfill@^3.2.1:
|
||||||
|
version "3.3.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b"
|
||||||
|
integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==
|
||||||
|
|
||||||
webfinger@^0.4.2:
|
webfinger@^0.4.2:
|
||||||
version "0.4.2"
|
version "0.4.2"
|
||||||
resolved "https://registry.yarnpkg.com/webfinger/-/webfinger-0.4.2.tgz#3477a6d97799461896039fcffc650b73468ee76d"
|
resolved "https://registry.yarnpkg.com/webfinger/-/webfinger-0.4.2.tgz#3477a6d97799461896039fcffc650b73468ee76d"
|
||||||
|
|
Loading…
Reference in New Issue