Merge branch 'backstage:master' into feature-flag-documentation-update

This commit is contained in:
Kurt King
2022-12-05 06:00:12 -07:00
committed by GitHub
36 changed files with 197 additions and 74 deletions
+10
View File
@@ -0,0 +1,10 @@
---
'@backstage/plugin-bazaar-backend': patch
'@backstage/plugin-catalog-backend': patch
'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
'@backstage/plugin-playlist-backend': patch
'@backstage/plugin-search-backend-module-pg': patch
'@backstage/plugin-user-settings-backend': patch
---
Ensured typescript type checks in migration files.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-vault-backend': patch
---
Added (optional) config `vault.publicUrl` as alternative to `vault.baseUrl` for `editUrl` and `showUrl` in case `vault.baseUrl` is internal
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-common': patch
---
Updated dependency `@types/http-errors` to `^2.0.0`.
+8
View File
@@ -0,0 +1,8 @@
---
'@backstage/core-components': patch
'@backstage/plugin-gcp-projects': patch
'@backstage/plugin-scaffolder': patch
'@backstage/plugin-techdocs-module-addons-contrib': patch
---
Updated dependency `@react-hookz/web` to `^20.0.0`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-stack-overflow-backend': patch
---
Added option to supply API Access Token. This is required in addition to an API key when trying to access the data for a private Stack Overflow Team.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Bump `json-schema-library` to version `^7.3.9` which does not pull in the `gson-pointer` library
+3 -3
View File
@@ -2940,9 +2940,9 @@ __metadata:
linkType: hard
"decode-uri-component@npm:^0.2.0":
version: 0.2.0
resolution: "decode-uri-component@npm:0.2.0"
checksum: f3749344ab9305ffcfe4bfe300e2dbb61fc6359e2b736812100a3b1b6db0a5668cba31a05e4b45d4d63dbf1a18dfa354cd3ca5bb3ededddabb8cd293f4404f94
version: 0.2.2
resolution: "decode-uri-component@npm:0.2.2"
checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139
languageName: node
linkType: hard
+1 -1
View File
@@ -101,7 +101,7 @@
"@types/compression": "^1.7.0",
"@types/concat-stream": "^2.0.0",
"@types/fs-extra": "^9.0.3",
"@types/http-errors": "^1.6.3",
"@types/http-errors": "^2.0.0",
"@types/minimist": "^1.2.0",
"@types/mock-fs": "^4.13.0",
"@types/morgan": "^1.9.0",
+1 -1
View File
@@ -41,7 +41,7 @@
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
"@react-hookz/web": "^19.0.0",
"@react-hookz/web": "^20.0.0",
"@types/react-sparklines": "^1.7.0",
"@types/react-text-truncate": "^0.14.0",
"ansi-regex": "^6.0.1",
@@ -14,6 +14,11 @@
* limitations under the License.
*/
// @ts-check
/**
* @param {import('knex').Knex} knex
*/
exports.up = async function up(knex) {
await knex.schema.createTable('metadata', table => {
table.comment('The table of Bazaar metadata');
@@ -59,6 +64,9 @@ exports.up = async function up(knex) {
});
};
/**
* @param {import('knex').Knex} knex
*/
exports.down = async function down(knex) {
await knex.schema.dropTable('metadata');
await knex.schema.dropTable('members');
@@ -14,6 +14,11 @@
* limitations under the License.
*/
// @ts-check
/**
* @param {import('knex').Knex} knex
*/
exports.up = async function up(knex) {
await knex.schema.alterTable('metadata', table => {
table
@@ -35,6 +40,9 @@ exports.up = async function up(knex) {
});
};
/**
* @param {import('knex').Knex} knex
*/
exports.down = async function down(knex) {
await knex.schema.alterTable('metadata', table => {
table
@@ -14,6 +14,11 @@
* limitations under the License.
*/
// @ts-check
/**
* @param {import('knex').Knex} knex
*/
exports.up = async function up(knex) {
if (knex.client.config.client.includes('sqlite3')) {
await knex.schema.dropTable('metadata');
@@ -92,6 +97,9 @@ exports.up = async function up(knex) {
}
};
/**
* @param {import('knex').Knex} knex
*/
exports.down = async function down(knex) {
if (knex.client.config.client.includes('sqlite3')) {
await knex.schema.dropTable('metadata');
@@ -14,12 +14,20 @@
* limitations under the License.
*/
// @ts-check
/**
* @param {import('knex').Knex} knex
*/
exports.up = async function up(knex) {
await knex.schema.alterTable('members', table => {
table.string('user_ref').nullable();
});
};
/**
* @param {import('knex').Knex} knex
*/
exports.down = async function down(knex) {
return knex.schema.table('members', table => {
table.dropColumn('user_ref');
@@ -14,9 +14,10 @@
* limitations under the License.
*/
// @ts-check
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
* @param {import('knex').Knex} knex
*/
exports.up = async function up(knex) {
await knex.schema.alterTable('metadata', table => {
@@ -25,8 +26,7 @@ exports.up = async function up(knex) {
};
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
* @param {import('knex').Knex} knex
*/
exports.down = async function down(knex) {
await knex.schema.alterTable('metadata', table => {
@@ -14,6 +14,8 @@
* limitations under the License.
*/
// @ts-check
/**
* @param { import("knex").Knex } knex
*/
@@ -25,7 +27,7 @@ exports.up = async function up(knex) {
table.comment('Tracks ingestion streams for very large data sets');
table
.uuid('id', { primary: true })
.uuid('id')
.notNullable()
.comment('Auto-generated ID of the ingestion');
@@ -85,7 +87,7 @@ exports.up = async function up(knex) {
});
await knex.schema.alterTable('ingestions', t => {
t.primary('id');
t.primary(['id']);
t.index('provider_name', 'ingestion_provider_name_idx');
t.unique(['provider_name', 'completion_ticket'], {
indexName: 'ingestion_composite_index',
@@ -100,7 +102,7 @@ exports.up = async function up(knex) {
table.comment('tracks each step of an iterative ingestion');
table
.uuid('id', { primary: true })
.uuid('id')
.notNullable()
.comment('Auto-generated ID of the ingestion mark');
@@ -128,7 +130,7 @@ exports.up = async function up(knex) {
});
await knex.schema.alterTable('ingestion_marks', t => {
t.primary('id');
t.primary(['id']);
t.index('ingestion_id', 'ingestion_mark_ingestion_id_idx');
});
@@ -141,7 +143,7 @@ exports.up = async function up(knex) {
);
table
.uuid('id', { primary: true })
.uuid('id')
.notNullable()
.comment('Auto-generated ID of the marked entity');
@@ -162,7 +164,7 @@ exports.up = async function up(knex) {
});
await knex.schema.alterTable('ingestion_mark_entities', t => {
t.primary('id');
t.primary(['id']);
t.index('ingestion_mark_id', 'ingestion_mark_entity_ingestion_mark_id_idx');
});
};
@@ -27,7 +27,7 @@ exports.up = async function up(knex) {
//
.createTable('locations', table => {
table.comment(
'Registered locations that shall be contiuously scanned for catalog item updates',
'Registered locations that shall be continuously scanned for catalog item updates',
);
table
.uuid('id')
@@ -14,6 +14,8 @@
* limitations under the License.
*/
// @ts-check
/**
* @param { import("knex").Knex } knex
*/
@@ -14,6 +14,8 @@
* limitations under the License.
*/
// @ts-check
/**
* @param { import("knex").Knex } knex
*/
+1 -1
View File
@@ -39,7 +39,7 @@
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
"@react-hookz/web": "^19.0.0"
"@react-hookz/web": "^20.0.0"
},
"peerDependencies": {
"react": "^16.13.1 || ^17.0.0",
@@ -14,6 +14,11 @@
* limitations under the License.
*/
// @ts-check
/**
* @param { import("knex").Knex } knex
*/
exports.up = async function up(knex) {
await knex.schema.createTable('playlists', table => {
table.comment('Playlists table');
@@ -57,6 +62,9 @@ exports.up = async function up(knex) {
});
};
/**
* @param { import("knex").Knex } knex
*/
exports.down = async function down(knex) {
await knex.schema.dropTable('playlists');
await knex.schema.dropTable('entities');
+2 -2
View File
@@ -53,7 +53,7 @@
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
"@react-hookz/web": "^19.0.0",
"@react-hookz/web": "^20.0.0",
"@rjsf/core": "^3.2.1",
"@rjsf/core-v5": "npm:@rjsf/core@^5.0.0-beta.12",
"@rjsf/material-ui": "^3.2.1",
@@ -67,7 +67,7 @@
"humanize-duration": "^3.25.1",
"immer": "^9.0.1",
"json-schema": "^0.4.0",
"json-schema-library": "^7.0.0",
"json-schema-library": "^7.3.9",
"lodash": "^4.17.21",
"luxon": "^3.0.0",
"qs": "^6.9.4",
@@ -14,6 +14,8 @@
* limitations under the License.
*/
// @ts-check
/**
* @param {import('knex').Knex} knex
*/
@@ -14,6 +14,8 @@
* limitations under the License.
*/
// @ts-check
/**
* @param {import('knex').Knex} knex
*/
+5 -2
View File
@@ -15,14 +15,17 @@ stackoverflow:
baseUrl: https://api.stackexchange.com/2.2 # alternative: your internal stack overflow instance
```
### Stack Overflow for Teams (private stack overflow instance)
### Stack Overflow for Teams
If you have a private stack overflow instance you will need to supply an API key as well. You can read more about how to set this up by going to [Stack Overflows Help Page](https://stackoverflow.help/en/articles/4385859-stack-overflow-for-teams-api)
If you have a private Stack Overflow instance and/or a private Stack Overflow Team you will need to supply an API key. You can read more about how to set this up by going to [Stack Overflow's Help Page](https://stackoverflow.help/en/articles/4385859-stack-overflow-for-teams-api).
A private Stack Overflow Team requires both an API key and an API Access Token. Step 3 ("Generate an Access Token via OAuth") from the previously mentioned Help Page explains the process for generating an API Access Token with no expiration.
```yaml
stackoverflow:
baseUrl: https://api.stackexchange.com/2.2 # alternative: your internal stack overflow instance
apiKey: $STACK_OVERFLOW_API_KEY
apiAccessToken: $STACK_OVERFLOW_API_ACCESS_TOKEN
```
## Areas of Responsibility
@@ -43,6 +43,7 @@ export type StackOverflowQuestionsCollatorFactoryOptions = {
baseUrl?: string;
maxPage?: number;
apiKey?: string;
apiAccessToken?: string;
requestParams: StackOverflowQuestionsRequestParams;
logger: Logger;
};
+7 -1
View File
@@ -25,9 +25,15 @@ export interface Config {
baseUrl?: string;
/**
* The api key to authenticate to Stack Overflow API
* The API key to authenticate to Stack Overflow API
* @visibility secret
*/
apiKey?: string;
/**
* The API Access Token to authenticate to Stack Overflow API
* @visibility secret
*/
apiAccessToken?: string;
};
}
@@ -52,6 +52,7 @@ export type StackOverflowQuestionsCollatorFactoryOptions = {
baseUrl?: string;
maxPage?: number;
apiKey?: string;
apiAccessToken?: string;
requestParams: StackOverflowQuestionsRequestParams;
logger: Logger;
};
@@ -67,6 +68,7 @@ export class StackOverflowQuestionsCollatorFactory
protected requestParams: StackOverflowQuestionsRequestParams;
private readonly baseUrl: string | undefined;
private readonly apiKey: string | undefined;
private readonly apiAccessToken: string | undefined;
private readonly maxPage: number | undefined;
private readonly logger: Logger;
public readonly type: string = 'stack-overflow';
@@ -74,6 +76,7 @@ export class StackOverflowQuestionsCollatorFactory
private constructor(options: StackOverflowQuestionsCollatorFactoryOptions) {
this.baseUrl = options.baseUrl;
this.apiKey = options.apiKey;
this.apiAccessToken = options.apiAccessToken;
this.maxPage = options.maxPage;
this.requestParams = options.requestParams;
this.logger = options.logger.child({ documentType: this.type });
@@ -84,6 +87,9 @@ export class StackOverflowQuestionsCollatorFactory
options: StackOverflowQuestionsCollatorFactoryOptions,
) {
const apiKey = config.getOptionalString('stackoverflow.apiKey');
const apiAccessToken = config.getOptionalString(
'stackoverflow.apiAccessToken',
);
const baseUrl =
config.getOptionalString('stackoverflow.baseUrl') ||
'https://api.stackexchange.com/2.2';
@@ -93,6 +99,7 @@ export class StackOverflowQuestionsCollatorFactory
baseUrl,
maxPage,
apiKey,
apiAccessToken,
});
}
@@ -138,6 +145,13 @@ export class StackOverflowQuestionsCollatorFactory
}
const res = await fetch(
`${this.baseUrl}/questions${params}${apiKeyParam}&page=${page}`,
this.apiAccessToken
? {
headers: {
'X-API-Access-Token': this.apiAccessToken,
},
}
: undefined,
);
const data = await res.json();
@@ -42,7 +42,7 @@
"@material-ui/core": "^4.9.13",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
"@react-hookz/web": "^19.0.0",
"@react-hookz/web": "^20.0.0",
"git-url-parse": "^13.0.0",
"react-use": "^17.2.4"
},
@@ -14,6 +14,8 @@
* limitations under the License.
*/
// @ts-check
/**
* @param {import('knex').Knex} knex
*/
+2 -1
View File
@@ -63,7 +63,8 @@ To get started, first you need a running instance of Vault. You can follow [this
```yaml
vault:
baseUrl: http://your-vault-url
baseUrl: http://your-internal-vault-url.svc
publicUrl: https://your-vault-url.example.com
token: <VAULT_TOKEN>
secretEngine: 'customSecretEngine' # Optional. By default it uses 'secrets'
kvVersion: <kv-version> # Optional. The K/V version that your instance is using. The available options are '1' or '2'
+6
View File
@@ -23,6 +23,12 @@ export interface Config {
*/
baseUrl: string;
/**
* The publicUrl for your Vault instance (Optional).
* @visibility frontend
*/
publicUrl?: string;
/**
* The token used by Backstage to access Vault.
* @visibility secret
@@ -40,6 +40,7 @@ describe('GetVaultConfig', () => {
const vaultConfig = getVaultConfig(config);
expect(vaultConfig).toStrictEqual({
baseUrl: 'http://www.example.com',
publicUrl: undefined,
token: '123',
kvVersion: 2,
secretEngine: 'secrets',
@@ -59,6 +60,7 @@ describe('GetVaultConfig', () => {
const vaultConfig = getVaultConfig(config);
expect(vaultConfig).toStrictEqual({
baseUrl: 'http://www.example.com',
publicUrl: undefined,
token: '123',
kvVersion: 1,
secretEngine: 'test',
@@ -27,6 +27,11 @@ export interface VaultConfig {
*/
baseUrl: string;
/**
* The publicUrl for your Vault instance (Optional).
*/
publicUrl?: string;
/**
* The token used by Backstage to access Vault.
*/
@@ -53,6 +58,7 @@ export interface VaultConfig {
export function getVaultConfig(config: Config): VaultConfig {
return {
baseUrl: config.getString('vault.baseUrl'),
publicUrl: config.getOptionalString('vault.publicUrl'),
token: config.getString('vault.token'),
kvVersion: config.getOptionalNumber('vault.kvVersion') ?? 2,
secretEngine: config.getOptionalString('vault.secretEngine') ?? 'secrets',
@@ -135,11 +135,13 @@ export class VaultClient implements VaultApi {
)),
);
} else {
const vaultUrl =
this.vaultConfig.publicUrl || this.vaultConfig.baseUrl;
secrets.push({
name: secret,
path: secretPath,
editUrl: `${this.vaultConfig.baseUrl}/ui/vault/secrets/${this.vaultConfig.secretEngine}/edit/${secretPath}/${secret}`,
showUrl: `${this.vaultConfig.baseUrl}/ui/vault/secrets/${this.vaultConfig.secretEngine}/show/${secretPath}/${secret}`,
editUrl: `${vaultUrl}/ui/vault/secrets/${this.vaultConfig.secretEngine}/edit/${secretPath}/${secret}`,
showUrl: `${vaultUrl}/ui/vault/secrets/${this.vaultConfig.secretEngine}/show/${secretPath}/${secret}`,
});
}
}),
+3 -3
View File
@@ -5092,9 +5092,9 @@ __metadata:
linkType: hard
"decode-uri-component@npm:^0.2.0":
version: 0.2.0
resolution: "decode-uri-component@npm:0.2.0"
checksum: f3749344ab9305ffcfe4bfe300e2dbb61fc6359e2b736812100a3b1b6db0a5668cba31a05e4b45d4d63dbf1a18dfa354cd3ca5bb3ededddabb8cd293f4404f94
version: 0.2.2
resolution: "decode-uri-component@npm:0.2.2"
checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139
languageName: node
linkType: hard
+37 -45
View File
@@ -3412,7 +3412,7 @@ __metadata:
"@types/dockerode": ^3.3.0
"@types/express": ^4.17.6
"@types/fs-extra": ^9.0.3
"@types/http-errors": ^1.6.3
"@types/http-errors": ^2.0.0
"@types/luxon": ^3.0.0
"@types/minimist": ^1.2.0
"@types/mock-fs": ^4.13.0
@@ -3967,7 +3967,7 @@ __metadata:
"@material-ui/core": ^4.12.2
"@material-ui/icons": ^4.9.1
"@material-ui/lab": 4.0.0-alpha.57
"@react-hookz/web": ^19.0.0
"@react-hookz/web": ^20.0.0
"@testing-library/jest-dom": ^5.10.1
"@testing-library/react": ^12.1.3
"@testing-library/react-hooks": ^8.0.0
@@ -6196,7 +6196,7 @@ __metadata:
"@material-ui/core": ^4.12.2
"@material-ui/icons": ^4.9.1
"@material-ui/lab": 4.0.0-alpha.57
"@react-hookz/web": ^19.0.0
"@react-hookz/web": ^20.0.0
"@testing-library/jest-dom": ^5.10.1
"@testing-library/react": ^12.1.3
"@testing-library/user-event": ^14.0.0
@@ -7475,7 +7475,7 @@ __metadata:
"@material-ui/core": ^4.12.2
"@material-ui/icons": ^4.9.1
"@material-ui/lab": 4.0.0-alpha.57
"@react-hookz/web": ^19.0.0
"@react-hookz/web": ^20.0.0
"@rjsf/core": ^3.2.1
"@rjsf/core-v5": "npm:@rjsf/core@^5.0.0-beta.12"
"@rjsf/material-ui": ^3.2.1
@@ -7497,7 +7497,7 @@ __metadata:
humanize-duration: ^3.25.1
immer: ^9.0.1
json-schema: ^0.4.0
json-schema-library: ^7.0.0
json-schema-library: ^7.3.9
lodash: ^4.17.21
luxon: ^3.0.0
msw: ^0.49.0
@@ -8139,7 +8139,7 @@ __metadata:
"@material-ui/core": ^4.9.13
"@material-ui/icons": ^4.9.1
"@material-ui/lab": 4.0.0-alpha.57
"@react-hookz/web": ^19.0.0
"@react-hookz/web": ^20.0.0
"@testing-library/jest-dom": ^5.10.1
"@testing-library/react": ^12.1.3
"@testing-library/user-event": ^14.0.0
@@ -12432,9 +12432,9 @@ __metadata:
languageName: node
linkType: hard
"@react-hookz/web@npm:^19.0.0":
version: 19.2.0
resolution: "@react-hookz/web@npm:19.2.0"
"@react-hookz/web@npm:^20.0.0":
version: 20.0.0
resolution: "@react-hookz/web@npm:20.0.0"
dependencies:
"@react-hookz/deep-equal": ^1.0.3
peerDependencies:
@@ -12444,7 +12444,7 @@ __metadata:
peerDependenciesMeta:
js-cookie:
optional: true
checksum: 0fda3d3a0f967b6b38817f1e72d111711fc01036a8e6d0850bd4e3b3fa41af8635b260babf19e384402ac6d2dfa7db779585c0c8b16700cc0f568df9662ca517
checksum: 475d03cdd9a9131b7094549602c8a3ab52ad33e99d7ef408ba2ee7897bfdf332ab5228f46187b9a4c42535b4aaaf808e2c9c882949b2ec32d5ad42d53487a723
languageName: node
linkType: hard
@@ -12793,6 +12793,23 @@ __metadata:
languageName: node
linkType: hard
"@sagold/json-pointer@npm:^5.0.0":
version: 5.0.0
resolution: "@sagold/json-pointer@npm:5.0.0"
checksum: 0a087ff25e28d0c49b56566a14d6186ae0ce9fe538569eb7756c1a70989f2794dbc6f0834b5d2f2a0a79b6f0e3096eb05558664d5ff038daba5a46cb5e752e1a
languageName: node
linkType: hard
"@sagold/json-query@npm:^6.0.0":
version: 6.0.0
resolution: "@sagold/json-query@npm:6.0.0"
dependencies:
"@sagold/json-pointer": ^5.0.0
ebnf: ^1.9.0
checksum: 56bb6151e6e6b1ef26bb03133b440e90d47c013529899e26cedb4c96f8a51f0115717ebab1355a8c3e6ea0c70e5ddaefc54c44330686ae3b2f8cb7d162011d73
languageName: node
linkType: hard
"@short.io/opensearch-mock@npm:^0.3.1":
version: 0.3.1
resolution: "@short.io/opensearch-mock@npm:0.3.1"
@@ -14167,10 +14184,10 @@ __metadata:
languageName: node
linkType: hard
"@types/http-errors@npm:^1.6.3":
version: 1.8.2
resolution: "@types/http-errors@npm:1.8.2"
checksum: ecc365eea98d7eca650d593e742571acc3003742f0dd0fbbb15b8fce286e0f7421644b4140fb9bf701bbb7f1b744aea3967ebe025f0f0811aa5ab2c3d40fe111
"@types/http-errors@npm:^2.0.0":
version: 2.0.1
resolution: "@types/http-errors@npm:2.0.1"
checksum: 3bb0c50b0a652e679a84c30cd0340d696c32ef6558518268c238840346c077f899315daaf1c26c09c57ddd5dc80510f2a7f46acd52bf949e339e35ed3ee9654f
languageName: node
linkType: hard
@@ -23741,31 +23758,6 @@ __metadata:
languageName: node
linkType: hard
"gson-conform@npm:^1.0.3":
version: 1.0.3
resolution: "gson-conform@npm:1.0.3"
checksum: 63867de06365e82394492fb83dd225e2f8af71f1ff0eb72bd860a86d4b4830e3cc3cdd561374625cc6ef99415a3f757c932ef08cf9fc3c097f0903d0c47bca8b
languageName: node
linkType: hard
"gson-pointer@npm:4.1.1, gson-pointer@npm:^4.1.1":
version: 4.1.1
resolution: "gson-pointer@npm:4.1.1"
checksum: e6ad0232467ae1ab8902cf801f74436ab28d251fa5f7db7dba78e26d871b7cd8edcef60170bd4ba1aa9b16639f2662a47bbb7214750c4a14594dba4990b0db47
languageName: node
linkType: hard
"gson-query@npm:^5.1.0":
version: 5.1.0
resolution: "gson-query@npm:5.1.0"
dependencies:
ebnf: ^1.9.0
gson-conform: ^1.0.3
gson-pointer: 4.1.1
checksum: 8af3d5ba52d0a684e71af1b00b2180b2d80bb8eea5252034c5a9f5213e06ee105ef77c17002cf10f1c8ecaaa0e2fbbd43978f579528c66a8b975a0dc4839e9d5
languageName: node
linkType: hard
"gtoken@npm:^6.1.0":
version: 6.1.1
resolution: "gtoken@npm:6.1.1"
@@ -26558,16 +26550,16 @@ __metadata:
languageName: node
linkType: hard
"json-schema-library@npm:^7.0.0":
version: 7.3.0
resolution: "json-schema-library@npm:7.3.0"
"json-schema-library@npm:^7.3.9":
version: 7.3.9
resolution: "json-schema-library@npm:7.3.9"
dependencies:
"@sagold/json-pointer": ^5.0.0
"@sagold/json-query": ^6.0.0
deepmerge: ^4.2.2
fast-deep-equal: ^3.1.3
gson-pointer: ^4.1.1
gson-query: ^5.1.0
valid-url: ^1.0.9
checksum: 3d148d4be1e59e058bd777d247c181e2cb4820f9f5b9c97f7258f88fa73e1c0ed5c8e07c3fef4e1e8e892666def02b2b5fe5366d3d8d2bed09be3752e5593319
checksum: de40dd4d5f1ce438fa45703402716f2cf543b8e89d4ffc3618045f771f6f749928984905db761e9cf7e8602d213f4578c3e983a40e0d49013c0fea1488d397a8
languageName: node
linkType: hard